我似乎遇到了链接列表的问题,特别是删除了列表的尾部(编辑:和头部)。
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将在此场景中等于头部。请帮我弄清楚我可能做错了什么。
答案 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;
}