【发布时间】:2025-12-09 20:40:01
【问题描述】:
Funktion(deleteall) 获取一个链表和一个值,并删除所有持有该值的节点,然后在更改后返回该链表。
Pointer deleteall(Pointer l, int v)
{
Pointer temp;
while(l != NULL)
{
if(l->val == v) {
temp = l;
l = temp ->next;
free(temp);
}
if(l == NULL) return l;
else l = l->next;
}
return l;
}
没有错误显示,编译完成,没有任何显示,我认为程序进入了无限循环。
【问题讨论】:
-
return l;但你修改了l。在开头记住l,然后返回。 -
当你
free一个节点时,你还需要“填补”空白,即将前一个节点链接到下一个节点 -
逻辑很奇怪。 “如果这个节点有正确的值,那么无论如何都跳过下一个?”可能不是你想要做的。
-
这类问题非常适合调试器。尝试使用
gdb,它将允许您逐行执行此函数,因此您可以查看行为错误的地方 -
请试试这个*.com/questions/59097696/… 它应该可以帮助您查看 cmets 中提到的所有问题。我很想建议将其作为副本...
标签: c linked-list singly-linked-list pass-by-value function-definition