从链表的末尾删除节点

时间:2015-10-15 14:55:23

标签: c list singly-linked-list

我似乎遇到了链接列表的问题,特别是删除了列表的尾部(编辑:和头部)。

if(nodeTodelete->next == NULL){
    temp = head;
    while(temp->next != nodeTodelete)
        temp = temp->next;
    temp->next = NULL;
    free(nodeTodelete->name);
    free(nodeTodelete);
    return head;
}

这是我的代码。假设head指向我函数的头部,在这种情况下,nodeTodelete指向函数的尾部。

循环成功删除节点,但是在返回主函数时,链表仍然认为现在释放的节点仍然是函数的一部分,导致我的尾部的垃圾数据。然后,该函数将继续返回到同一个垃圾节点并尝试解释其数据,从而导致输出错误。

我需要知道应该做些什么来确保此尾节点不再被视为列表的一部分。

编辑:事实证明我在移除头部方面也遇到了问题 这是我的代码

if(head == nodeTodelete){
    temp = head->next;
    free(nodeTodelete->name);
    free(nodeTodelete);
    return temp;
}

假设nodeTodelete将在此场景中等于头部。请帮我弄清楚我可能做错了什么。

1 个答案:

答案 0 :(得分:0)

您需要释放next中的temp节点并将其设置为NULL

if (nodeTodelete->next == NULL) {
    temp = head;
    while(temp->next != nodeTodelete)
        temp = temp->next;
    free(temp->next->name);
    free(temp->next);
    temp->next = NULL;
    return head;
}

您可以以类似的方式删除头部,并且必须将其设置为NULL

if (head == nodeTodelete) {
    free(head->name);
    free(head);
    head = NULL;
    return head;
}