gpt4 book ai didi

c - 用递归删除双向链表中的所有节点

转载 作者:行者123 更新时间:2023-11-30 14:59:21 25 4
gpt4 key购买 nike

我正在尝试编写一个函数来删除链表中具有给定值的所有节点,但我想用递归函数来尝试它。我认为删除列表中最后一个节点的代码块无意中将整个列表设置为空,但我不知道如何解决这个问题。

编辑:整个列表不应该为空,它应该删除包含给定整数的所有节点。例如,如果给定列表是 3->4->3->6,而我们想要删除 3 的所有实例,则列表将为 4->6

typedef struct nodeStruct {
int num;
struct nodeStruct *next;
struct nodeStruct *prev;
}node;

node* deleteNode(node* head, int num) {
node* current = head;
if (current == NULL) {
return head;
} else if (current->num == num) {
if (current->prev == NULL) {
head = current->next;//delete first Node
head->prev = NULL;
free(current);
head = deleteNode(head, num);
} else if (current->next == NULL) {
free(current);//delete last node
return head;
} else {
current->prev->next = current->next; //delete middle node
current->next->prev = current->prev;
free(current);
head = deleteNode(head, num);
}
} else {
head = deleteNode(current->next, num);
}
return head;
}

最佳答案

类似这样的事情

if(head == NULL){
return NULL;
} else {
node *rest = deleteNode(head->next, num);
if(head->num == num){
if(rest != NULL){
rest->prev = NULL;
}
free(head);
return rest;
} else {
if(rest != NULL){
rest->prev = head;
}
head->next = rest;
return head;
}
}

关于c - 用递归删除双向链表中的所有节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42847181/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com