数据结构c语言版本中单链表的插入和删除如何写在一串代码中
时间: 2024-09-10 22:02:59 浏览: 61
在C语言版本的数据结构实现中,单链表的插入和删除操作是链表操作的两个基本功能。下面将给出一个简化的代码示例,展示如何在一个函数中实现单链表的插入和删除操作。
首先,定义单链表节点的数据结构:
```c
typedef struct Node {
int data;
struct Node* next;
} Node;
```
接着,实现一个函数,该函数接受链表头指针、要操作的节点位置、要插入或删除的数据(以及一个指示操作类型的参数):
```c
void insertOrDelete(Node** head, int position, int value, int operation) {
// 创建新节点(仅插入操作需要)
Node* newNode = NULL;
if (operation == INSERT) {
newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
}
// 插入或删除节点
Node* current = *head;
Node* previous = NULL;
// 寻找指定位置的节点及其前驱节点
for (int i = 0; current != NULL && i < position; ++i) {
previous = current;
current = current->next;
}
// 根据操作类型执行插入或删除
if (operation == INSERT) {
// 插入操作
if (previous == NULL) {
// 插入到链表头部
newNode->next = *head;
*head = newNode;
} else {
// 插入到链表中间或尾部
newNode->next = current;
previous->next = newNode;
}
} else {
// 删除操作
if (current == NULL) {
// 没有找到指定位置,无法删除
free(newNode); // 如果是插入失败则释放新节点
return;
}
if (previous == NULL) {
// 删除头节点
*head = current->next;
} else {
// 删除中间或尾部节点
previous->next = current->next;
}
if (operation == DELETE) {
free(current);
}
}
}
```
在上述代码中,`operation` 参数用于指示是插入操作还是删除操作:
- 当 `operation == INSERT` 时,进行插入操作;
- 当 `operation == DELETE` 时,进行删除操作。
注意:该示例代码是一个简化的版本,没有进行详细的错误检查,例如在分配新节点失败时应进行错误处理,并且在实际使用中可能需要更完整的功能支持。
阅读全文