C语言递归删除以L为首节点指针的单链表中值为x的所有节点,程序
时间: 2024-10-21 16:04:24 浏览: 54
在C语言中,递归删除单链表中所有值为`x`的节点通常会涉及两个步骤:首先找到目标节点,然后如果该节点值等于`x`,就将其从链表中移除,并处理好前驱节点的指向。这里是一个简单的递归函数示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构
typedef struct Node {
int data;
struct Node* next;
} Node;
// 递归删除函数
void deleteRecursively(Node** head, int x) {
if (*head == NULL) { // 链表为空,直接返回
return;
}
// 如果当前节点值等于x,删除它
if ((*head)->data == x) {
Node* temp = *head;
*head = (*head)->next; // 更新头指针
free(temp); // 释放当前节点内存
} else {
// 否则,继续遍历下一个节点并递归调用
deleteRecursively(&(*head)->next, x);
}
}
// 测试函数
void deleteValueFromList(Node** head, int x) {
deleteRecursively(head, x);
// 打印剩余链表(假设有一个主函数打印)
Node* current = *head;
while (current != NULL) {
printf("%d -> ", current->data);
current = current->next;
}
printf("NULL\n");
}
int main() {
// 初始化链表...
Node* listHead = createLinkedList(); // 创建链表函数,假设存在
// 删除值为x的节点
int valueToRemove = 5; // 例如,你想删除所有值为5的节点
deleteValueFromList(&listHead, valueToRemove);
return 0;
}
```
在这个示例中,`deleteRecursively`函数接收一个指向头节点的指针以及要查找的值`x`。函数会一直递归直到找到值不为`x`的节点,然后更新指针跳过已删除的节点。
阅读全文