我有麻烦从单链表中删除节点。当试图删除第一个节点时。它似乎是列表中其他部分的松散参考。有人能帮忙吗?这就是所讨论的函数,它取列表的头和要删除的节点的盘。
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;
}
如果您要从列表中删除第一个元素,那么您必须列出的任何指针现在都无效。当你设置list = current -> next;
时,list的值是你的函数的局部值,它永远不会回到你的函数去更新你传递给函数的列表开始的指针。
你需要一个指针指向另一个指针。
Car * removeCarFromList(Car ** list,char plate[])
然后将电流改为:Car * current = *list;
然后将list = current->next
改为*list = current->next;
然后在调用函数时将removeCarFromlist(myPointer,....
更改为removeCarFromlist(&myPointer, ....
当第一个元素被移除时,myPointer会指向下一个元素
一旦从函数中执行了return
,就不会有返回到同一函数的下一条指令,因此在return
之后使用break
是没有意义的。首先,去掉return
后面的break
语句。
函数处理链表节点删除必须单独处理head
节点的删除,确保新的head
被更新到下一个节点。
Node *tmp = *head;
*head = tmp->next;
free(tmp);