【发布时间】:2014-07-01 17:07:55
【问题描述】:
我正在使用链表进行练习,其中我需要根据条件删除一些节点。条件是''删除存储的数据小于或等于'avg'的节点。
我应该考虑三种情况: - 移除头节点 - 删除中间的一个节点 - 删除最后一个节点
我使用了三个指针,但这似乎不起作用。我究竟做错了什么?我是否不小心遗漏了一些指针?提前谢谢!
void checkAvg(int avg, struct list* head_node){
struct list* prev;
struct list* curr;
struct list* next;
prev = head;
curr = prev->link;
next = curr->link;
while (curr!=NULL) {
if (prev->data <= avg) {
head = curr;
}
if (curr->data <= avg) {
prev->link = curr->link;
}
if (next->data <= avg) {
curr->link = next->link;
}
prev = prev->link;
curr = curr->link;
next = next->link;
}
}
编辑: 对不起,正如你告诉我的,我没有具体说明。该程序必须这样做: 1)读取一个链表 2) 生成我读取的值的输出平均值(值的总和 / 值的数量) 3) 从列表中删除具有
感谢所有回复的人,我现在正在查看回复
【问题讨论】:
-
head_node = NULL时你的代码会发生什么? -
(a) 当您的列表为 empty 时,
head_node持有什么? (b) 当head_node指向的初始节点是您要删除的节点时会发生什么? (c) 是否有意没有释放实际内存并且您尝试删除的节点只是泄漏到以太中?简而言之,您没有提供足够的关于您选择不显示的代码的信息,以使我们能够准确了解您的列表是如何管理的,因此您得到的任何答案都不会出现明显错误- 最好的摇摆。 -
什么“似乎不起作用”?
-
我想回复大家:hacks while 循环应该给出一个段错误,所以需要修复我猜@WhozCraig A)是的,我只是注意到我需要一个条件 B)我以为我在第一个 if 条件下解决了这个问题,但我想它也不起作用 C) 不,这不是故意的,我想稍后再处理它,因为 DanFego,实际上它似乎不起作用删除不应删除的节点。我现在正在编辑帖子以提供更多信息
-
@WhozCraig 刚刚在我的帖子中发布了更正
标签: c list linked-list