gpt4 book ai didi

c - 从C中的链表中删除一些元素

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

我必须从链接列表中删除所有小于或等于“media”的元素。我已经编写了这个函数,但它对某些输入不起作用。

代码:

typedef struct lista {
int dato;
struct lista *next;
}
node;

......
.....
.....

void filtra_elementi(node ** head, int media)
{
node *prec, *corr;
while(((*head)->dato <= media) &&((*head!=NULL)))
{
corr=(*head)->next;
free(*head);
*head=corr;

}
prec=*head; corr=(*head)->next;
while(corr!=NULL)
{
if(corr->dato<=media)
{
prec->next=corr->next;
//free(corr);
corr=prec->next;
}
else prec=corr; corr=corr->next;
}
}

这是函数。如果列表是这样则不起作用0 10 1 11 3 13 4 14 5 15有人可以向我解释为什么吗?谢谢。

最佳答案

 corr=prec->next;
}
else prec=corr; corr=corr->next;//corr=corr->next is not in else part and will always be executed.
}

你想要的是

 corr=prec->next;
}
else
{prec=corr;
corr=corr->next;
}
}

此外,您的 while 条件是错误的。您应该更改检查的顺序。想想如果 (*head)null 然后访问 ( 会发生什么*head)->dato) 会导致运行时错误。如果你使用这个

while(((*head!=NULL)) && ((*head)->dato <= media))

如果 (*head)null (*head)->dato 将不会被访问。

关于c - 从C中的链表中删除一些元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31250713/

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