繁体   English   中英

编辑链接列表第2部分中的节点

[英]Editing a node in a Linked list Part2

与我以前的文章有关在链接列表中编辑节点 我已经完成了以下编辑节点的步骤:

  1. 编辑目标节点数据
  2. 删除目标节点
  3. 重新插入目标节点

问题是我无法按照以下说明重新插入节点...。

std1 90 -> std 2 50 -> std3 20 -> NULL

我将std3编辑为100。结果将像这样

   std2 50 -> std3 20 -> NULL

简而言之,我无法将其放回顶层节点。 在顶部节点以外的任何地方重新插入都可以正常工作。

如果头节点为97%,并且传递的节点为97%,则会遇到问题。 你要说

while (curr_std != NULL && to_add->grade <= curr_std->grade){

如果您要编辑的学生是第一个节点,您也会遇到问题,因为:

while((cur != NULL) && (strcmp(cur->name,temp) != 0)){

将评估为真,并且

prev = cur;

永远不会被调用,保留prev = null。 那当你到

prev->next = cur->next;

您有一个空引用。 您需要显式测试是否要添加到头节点。 这是它自己的特例。

scanf("%d", &(cur->grade));
if (prev == null) {  // you matched the head
    head = cur->next;
}
else {
    prev->next = cur->next;
}


编辑
在代码中添加头时,您尚未将头设置为指向新节点。 您将返回旧的头,该头现在指向列表中的第二个节点。 尝试:

while (curr_std != NULL && to_add->grade < curr_std->grade){
    prev_std = curr_std;
    curr_std = curr_std->next;
}

//  if you're adding to the head, you didn't go into the above loop
//  curr_std is still pointing to head in this case
if (curr_std == head) {
    head = to_add
}
else {
    prev_std->next = to_add;
}

to_add->next = curr_std;
return head;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM