我正在尝试实现一个单链表。刚刚创建了一个函数来删除列表中的最后一个节点,但由于某种原因,它将节点的值转换为 0
但并没有完全删除它。
函数本身:
void deleteNodeEnd(node_t **head) {
node_t *current = *head;
while(current->next != NULL) {
current = current->next;
}
free(current);
}
我怎么调用它:
deleteNodeEnd(&head);
我之前在列表中添加了 3 个值为 {10, 1, 2}
的节点,这是我在调用 deleteNodeEnd(&head)
之后得到的,然后打印列表:
$ ./linkedlist
10
1
0
所以最终我的意图是完全删除值为 2
的节点,而它只是变成了 0
。你能给我一个提示,我可能在哪里犯了错误吗?
最佳答案
您需要使倒数第二个元素指向null
,以便它成为最后一个元素。
如果您要从列表中删除唯一的元素,您还需要处理。
void deleteNodeEnd(node_t **head)
{
node_t *current = *head;
if(current->next == NULL)
{
*head = NULL;
free(current);
return;
}
while(current->next->next != NULL)
{
current = current->next;
}
free(current->next);
current->next = NULL;
}
关于c - 释放节点使其值变为0。如何完全删除它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48201208/