链表的结点删除c语言代码
时间: 2024-09-22 22:09:08 浏览: 38
单向链表结点的逐个删除-C语言教程
链表节点的删除在C语言中通常涉及到三个步骤:找到待删除的节点、更新前驱节点的指针以及释放被删除节点的内存。这里是一个简单的单向链表删除节点的例子:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表结构
typedef struct Node {
int data;
struct Node* next;
} Node;
// 删除指定值的节点函数
Node* deleteNode(Node** head, int value) {
// 检查链表是否为空
if (*head == NULL) {
return *head;
}
Node* current = *head;
// 如果头节点就是目标节点
if (current->data == value) {
*head = current->next; // 更新头节点
free(current); // 释放头节点的内存
return *head;
}
while (current->next != NULL && current->next->data != value) {
current = current->next; // 跟随列表直到找到目标节点或到达尾部
}
// 如果找到了目标节点,更新其前驱节点的指针
if (current->next != NULL) {
current->next = current->next->next; // 移除节点
free(current->next); // 释放节点内存
}
return *head;
}
int main() {
// 创建示例链表并删除节点
Node* head = (Node*)malloc(sizeof(Node));
head->data = 1;
head->next = (Node*)malloc(sizeof(Node));
head->next->data = 2;
head->next->next = (Node*)malloc(sizeof(Node));
head->next->next->data = 3;
Node* result = deleteNode(&head, 2);
// 打印删除后的链表
while (result != NULL) {
printf("%d ", result->data);
result = result->next;
}
return 0;
}
阅读全文