我无法从单链表中删除节点。尝试删除第一个节点时。它似乎松散了列表其余部分的参考。 有人可以帮忙吗? 这是有问题的功能,它需要删除列表的头部和节点的板块。
Car * removeCarFromList(Car * list,char plate[]){
Car * current = list;
Car * previous = NULL;
while (current != NULL){
if (strcmp(current->plate,plate)==0&& previous == NULL){
list = current -> next;
current -> next = NULL;
return current;
break;
} else if (strcmp(current->plate,plate)==0&& previous != NULL){
previous -> next = current -> next;
current -> next = NULL;
return current;
break;
}
previous = current;
current = current -> next;
}
return NULL;
}
答案 0 :(得分:1)
如果要从列表中删除第一个元素,那么您必须列出的任何指针现在都无效。当你将list = current -> next;
列表的值设置为函数的本地值时,它永远不会退出函数,以更新传递给列表开头函数的指针。
要做你想做的事,你需要一个指向指针的指针。
Car * removeCarFromList(Car ** list,char plate[])
然后将当前值更改为:Car * current = *list;
然后将list = current->next
更改为*list = current->next;
然后在调用您的函数时,将removeCarFromlist(myPointer,....
更改为removeCarFromlist(&myPointer, ....
当删除第一个项目时,这会将myPointer更改为指向列表中的下一个项目。
答案 1 :(得分:0)
从函数return
开始,没有返回到同一函数的下一条指令,因此在break
之后使用return
是荒谬的。首先,在break
之后删除return
语句。
删除功能处理链接列表节点必须单独删除head
节点 ,确保新head
更新为下一个节点
Node *tmp = *head;
*head = tmp->next;
free(tmp);