c语言单链表节点删除
时间: 2023-11-07 16:19:19 浏览: 61
在 C 语言中,可以使用单链表来实现节点的删除操作。下面是一个示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 删除指定数值的节点
void deleteNode(Node** head, int value) {
Node* current = *head;
Node* previous = NULL;
// 如果头节点就是要删除的节点
if (current != NULL && current->data == value) {
*head = current->next;
free(current);
return;
}
// 遍历链表查找要删除的节点
while (current != NULL && current->data != value) {
previous = current;
current = current->next;
}
// 如果找到了要删除的节点
if (current != NULL) {
previous->next = current->next;
free(current);
}
}
// 打印链表
void printList(Node* node) {
while (node != NULL) {
printf("%d ", node->data);
node = node->next;
}
printf("\n");
}
int main() {
// 创建链表
Node* head = NULL;
Node* second = NULL;
Node* third = NULL;
head = (Node*)malloc(sizeof(Node));
second = (Node*)malloc(sizeof(Node));
third = (Node*)malloc(sizeof(Node));
head->data = 1;
head->next = second;
second->data = 2;
second->next = third;
third->data = 3;
third->next = NULL;
// 打印原始链表
printf("原始链表:");
printList(head);
// 删除节点 2
deleteNode(&head, 2);
// 打印删除节点后的链表
printf("删除节点后的链表:");
printList(head);
return 0;
}
```
在上述代码中,我们定义了一个单链表的结构体 `Node`,其中包含数据域 `data` 和指针域 `next`。然后,我们使用 `deleteNode` 函数来实现节点的删除操作。该函数接受一个指向头节点指针的指针和要删除的数值作为参数。首先,我们判断头节点是否是要删除的节点,如果是,则更新头节点指针,并释放原来的头节点。否则,我们遍历链表,找到要删除的节点,并更新前一个节点的指针域,然后释放要删除的节点。最后,我们使用 `printList` 函数来打印链表。
在示例代码中,我们创建了一个包含三个节点的链表,并打印了原始链表。然后,通过调用 `deleteNode(&head, 2)` 删除了数值为 2 的节点,并打印了删除节点后的链表。
注意:在实际应用中,需要根据具体情况对链表进行内存管理,包括创建新节点时分配内存、删除节点时释放内存等操作。以上示例仅为演示单链表节点删除操作的基本思路。