繁体   English   中英

从链接列表的末尾删除节点

[英]Removing a node from the ends of a 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指向函数的结尾。

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

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

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

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

假设在这种情况下,nodeTodelete将等于头。 请帮助我弄清楚我可能做错了什么。

您需要释放tempnext节点并将其设置为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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM