我正在尝试实施单链表。刚刚创建了一个删除列表中最后一个节点的函数,但由于某种原因,它将节点的值转换为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
。你能不能给我一个暗示,我可能会犯这个错误?
答案 0 :(得分:3)
您需要将第二个最后一个元素指向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;
}