在带头节点的单链表L中,删除所有值为X的结点,并释放其空间,假设值为X的节点不唯一,c实现
时间: 2024-11-13 09:20:26 浏览: 15
链表-使用C语言实现带头结点的单链表.zip
在C语言中,删除单链表中所有值为X的节点并释放它们的空间,可以采用迭代或递归的方式。这里我们给出一种简单的迭代方法:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 函数用于删除值为X的节点
void deleteNodes(Node** head, int X) {
// 指针初始化
Node* current = *head; // 当前节点
Node* prev = NULL; // 上一个节点
while (current != NULL) {
if (current->data == X) {
// 如果当前节点值为X,更新指针
if (prev == NULL) { // 如果是头节点
*head = current->next; // 更新头指针
} else {
prev->next = current->next; // 删除当前节点
}
// 释放当前节点内存
free(current);
current = prev->next;
} else {
prev = current; // 非X节点,继续遍历
current = current->next;
}
}
}
// 测试函数
int main() {
Node* list = // 初始化链表,比如创建包含X的节点...
// ...
deleteNodes(&list, X); // 删除值为X的节点
// ...后续处理...
return 0;
}
阅读全文