[英]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将等于头。 请帮助我弄清楚我可能做错了什么。
您需要释放temp
的next
节点并将其设置为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.