【发布时间】:2010-12-09 17:09:55
【问题描述】:
与我之前的帖子Editing a node in a Linked list 相关。我在编辑节点时完成了以下步骤:
- 编辑目标节点数据
- 移除目标节点
- 重新插入目标节点
问题是我无法将它重新插入到节点的顶部,如下所示....
std1 90 -> std 2 50 -> std3 20 -> NULL
我把std3编辑成100,结果会是这样的
std2 50 -> std3 20 -> NULL
简而言之,我不能把它放回顶部节点。重新插入除顶部节点以外的任何地方都可以正常工作。
【问题讨论】:
-
什么不起作用?插入错误的地方,没有插入,其他条目丢失,分段错误,...?
-
如果您要插入一个与另一个成绩相同的学生,则中断。您在 insert_student 中的 while 循环不会执行,因此对 prev_std->next 的分配将失败,因为 prev_std 仍然为 NULL。 insert_student 中的条件之一需要包含“=”以及小于或大于
-
我认为如果 'head' 节点本身正在被编辑也会存在问题:节点删除会破坏列表,因为 'head' 没有更新为指向 cur->next 。
-
在调用 insert_student() 之前,您执行
prev->next = cur->next; ...- 您需要检查是否cur == head并更新 head 如果这是真的。一般来说,如果你给出一个具体的场景会很有帮助:现有的列表内容,你如何编辑哪个学生,然后列表包含什么。 -
@Lars 谢谢。我忽略了它。谢谢
标签: c linked-list