c语言链表 如何将链表被删除的节点恢复
时间: 2024-02-02 18:04:49 浏览: 26
链表节点被删除后,如果需要恢复该节点,需要进行以下步骤:
1. 创建一个新节点,将该节点的值设置为被删除节点的值。
2. 将该节点的next指针指向被删除节点的下一个节点。
3. 将被删除节点的next指针指向新节点。
下面是C语言实现链表节点恢复的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
struct ListNode {
int val;
struct ListNode *next;
};
// 删除链表中的指定节点
void deleteNode(struct ListNode* node) {
if (node == NULL) {
return;
}
struct ListNode* next = node->next;
node->val = next->val;
node->next = next->next;
free(next);
}
// 恢复链表中的指定节点
void recoverNode(struct ListNode* node) {
if (node == NULL) {
return;
}
struct ListNode* new_node = (struct ListNode*)malloc(sizeof(struct ListNode));
new_node->val = node->val;
new_node->next = node->next;
node->next = new_node;
}
int main() {
// 创建链表 1->2->3->4->5
struct ListNode* head = (struct ListNode*)malloc(sizeof(struct ListNode));
head->val = 1;
head->next = NULL;
struct ListNode* p = head;
for (int i = 2; i <= 5; i++) {
struct ListNode* node = (struct ListNode*)malloc(sizeof(struct ListNode));
node->val = i;
node->next = NULL;
p->next = node;
p = node;
}
// 删除链表中的节点3
struct ListNode* node = head->next->next;
deleteNode(node);
// 恢复链表中的节点3
recoverNode(node);
// 遍历链表,输出节点值
p = head;
while (p != NULL) {
printf("%d ", p->val);
p = p->next;
}
printf("\n");
return 0;
}
```