Freeing节点将其值呈现为0.如何完全删除它?

时间:2018-01-11 06:44:24

标签: c data-structures singly-linked-list

我正在尝试实施单链表。刚刚创建了一个删除列表中最后一个节点的函数,但由于某种原因,它将节点的值转换为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。你能不能给我一个暗示,我可能会犯这个错误?

1 个答案:

答案 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;
}