[英]Editing a node in a Linked list Part2
与我以前的文章有关在链接列表中编辑节点 。 我已经完成了以下编辑节点的步骤:
问题是我无法按照以下说明重新插入节点...。
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.