12.编程实现单链表删除节点(该数据为num)node "del(node *head, int num) {
时间: 2024-09-11 11:06:31 浏览: 38
用C++编写的双向链表程序示例.doc
在C语言中,要实现单链表删除指定值(num)的节点,你需要首先遍历链表找到该值的节点,然后根据链表的特点更新前驱节点的指针指向后继节点。以下是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 删除节点函数
Node* del(Node* head, int num) {
// 检查链表是否为空
if (head == NULL) {
return head;
}
// 遍历查找待删除节点
Node* current = head;
while (current != NULL && current->data != num) {
current = current->next;
}
// 如果找到了节点,处理边界情况
if (current != NULL) {
// 当前节点不是尾节点
if (current->next != NULL) {
// 更新前驱节点的next指针
current->prev->next = current->next;
}
// 当前节点是尾节点
else {
// 更新头节点
head = current->prev;
}
// 释放当前节点内存
free(current);
}
return head;
}
// 示例用法
int main() {
Node* list = create_list(); // 假设有一个创建链表的函数create_list()
// ... 实现链表操作
Node* new_head = del(list, 5); // 尝试删除值为5的节点
// ... 继续使用新链表new_head
return 0;
}
```
在这个例子中,`del` 函数接收链表的头节点 `head` 和一个整数 `num`。它首先检查链表是否为空,然后遍历链表直到找到值为 `num` 的节点。如果找到,就更新前驱节点的 `next` 指针以跳过被删除的节点,并释放被删除节点的内存。如果没有找到,则直接返回原链表。
如果你有具体的链表创建或修改需求,请提供更多的上下文信息。接下来的问题可能包括如何创建链表、链表的插入和输出等。
阅读全文