【发布时间】:2018-01-11 06:44:23
【问题描述】:
我正在尝试实现一个单链表。刚刚创建了一个删除列表中最后一个节点的函数,但由于某种原因,它将节点的值转换为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 终止你的列表,不是吗?
-
其实没有,我这里添加的时候代码有误,后来又编辑了。也许你看到了最初的版本?
-
我看到了两个版本。我的评论仍然成立。当您释放指针时,访问它会变成未定义的行为,因此您会看到 0。不能依赖该 0。
-
您的评论帮了大忙,有了下面的答案,我完全明白了!谢谢!
标签: c data-structures singly-linked-list