问题从列表中删除节点

时间:2016-10-14 22:51:32

标签: c data-structures linked-list

我无法从单链表中删除节点。尝试删除第一个节点时。它似乎松散了列表其余部分的参考。 有人可以帮忙吗? 这是有问题的功能,它需要删除列表的头部和节点的板块。

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

2 个答案:

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