c语言链表删除节点
时间: 2023-08-25 10:12:18 浏览: 104
链表删除节点的基本步骤如下:
1. 找到要删除的节点的前一个节点。
2. 将前一个节点的next指针指向要删除节点的下一个节点。
3. 释放要删除节点所占用的内存空间。
下面是一个示例代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
struct ListNode {
int val;
struct ListNode *next;
};
// 删除链表中值为val的节点
struct ListNode* deleteNode(struct ListNode* head, int val) {
// 处理头节点为val的情况
while (head != NULL && head->val == val) {
struct ListNode* node = head;
head = head->next;
free(node);
}
// 处理其他节点为val的情况
struct ListNode* curr = head;
while (curr != NULL && curr->next != NULL) {
if (curr->next->val == val) {
struct ListNode* node = curr->next;
curr->next = node->next;
free(node);
} else {
curr = curr->next;
}
}
return head;
}
// 测试代码
int main() {
// 创建链表
struct ListNode* head = (struct ListNode*)malloc(sizeof(struct ListNode));
head->val = 1;
head->next = (struct ListNode*)malloc(sizeof(struct ListNode));
head->next->val = 2;
head->next->next = (struct ListNode*)malloc(sizeof(struct ListNode));
head->next->next->val = 3;
head->next->next->next = NULL;
// 删除节点2
head = deleteNode(head, 2);
// 打印链表
struct ListNode* curr = head;
while (curr != NULL) {
printf("%d ", curr->val);
curr = curr->next;
}
printf("\n");
// 释放链表所占用的内存空间
curr = head;
while (curr != NULL) {
struct ListNode* node = curr;
curr = curr->next;
free(node);
}
return 0;
}
```
在这个示例代码中,我们定义了一个结构体`ListNode`来表示链表节点,其中包含一个整型成员`val`和一个指向下一个节点的指针`next`。然后,我们定义了一个函数`deleteNode`来删除链表中值为`val`的节点。函数的实现过程中,我们分别处理头节点为`val`和其他节点为`val`的情况。最后,我们在主函数中创建了一个链表,并调用`deleteNode`函数删除了节点2,最后释放了链表所占用的内存空间。
阅读全文