gpt4 book ai didi

c - 双链表递归的问题

转载 作者:行者123 更新时间:2023-11-30 16:48:19 25 4
gpt4 key购买 nike

我在进行递归删除时遇到问题,目前我可以一次删除 1 个节点,而我应该删除所有匹配项。我无法删除循环中的所有实例。

void delete(struct node *ptr){
struct node *tmp;
while(ptr->next != NULL && (ptr->next)->critical = 'c'){
ptr = ptr->next; //Iterate until I find a node next to data
}
if(ptr->next == NULL){
printf("No Element");
}
tmp = ptr->next;
if(tmp->next == NULL){
ptr->next = NULL;
} else {
ptr->next = tmp->next;
(ptr->next)->prev = tmp->prev;
}
tmp->prev = ptr;
free(tmp);
}

工作更新我只需将所有这些放入另一个 while(ptr != NULL){... ptr = ptr->next} 循环中以进行递归删除。

最佳答案

您的代码存在一些问题
更正后的代码为

void delete(struct node *ptr){
struct node *tmp;
while(ptr)
{
if(ptr->critical!='c')
{tmp=ptr;
ptr=ptr->next;
ptr->prev=null;
free(tmp);}
else
break;

}
while(ptr->next!=null)
{
if(ptr->next->critical=='c')
ptr=ptr->next;
else
{
tmp = ptr->next;
if(tmp->next == NULL){
ptr->next = NULL;
} else {
ptr->next = tmp->next;
(ptr->next)->prev = tmp->prev;
}
tmp->prev = ptr;
free(tmp);
}
}

查看代码中的更正

我首先从列表的开头删除所需的值。
然后我继续删除这些值,直到到达最后一个节点。

您的代码的问题是,每当您删除一个值时,您都没有检查列表中的其他值。

关于c - 双链表递归的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43011651/

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