C语言 发布从列表中删除节点



我有麻烦从单链表中删除节点。当试图删除第一个节点时。它似乎是列表中其他部分的松散参考。有人能帮忙吗?这就是所讨论的函数,它取列表的头和要删除的节点的盘。

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);

相关内容

  • 没有找到相关文章

最新更新