未打印链接列表的最后一个节点值

时间:2016-03-05 16:07:06

标签: c linked-list

我正在尝试遍历链表并使用node显示每个节点的值。我在这里使用while循环。但问题是链表的最后一个元素没有被打印。我不得不打印最后一个元素分开。

int print(){

    printf("\ncurrent list is \n");
    struct Node* showList;

    showList=head;
    while(showList->next !=NULL){

        printf("%d ",showList->data);
        showList=showList->next;
    }
    printf("%d",showList->data); // it prints the last element
    printf("\n");
}

4 个答案:

答案 0 :(得分:3)

您可以将条件更改为:

while(showList != NULL)

然后您的while不会跳过最后一个节点。它正在跳过当前状态中的最后一个节点,因为很明显当你在最后一个节点showList->next == NULL时,即使节点包含一个值,循环也不会执行。

修改:确保您在更改后删除了此行,否则您将遇到问题:

printf("%d",showList->data); // it prints the last element

或者您可以使用for循环:

for(showList = head; showList != NULL; showList = showList->next)
    printf("%d ",showList->data);

答案 1 :(得分:2)

据推测,列表中的最后一个节点next设置为NULL。这对于链表实现来说是典型的。

如果在您的实现中出现这种情况,则while循环的条件在最后一个节点上失败。换句话说,(showList->next !=NULL)showList是最后一个节点时评估为false。

要确保打印最后一个节点,请更改正在测试的条件。例如,您可以简单地测试showList是否为空。

答案 2 :(得分:1)

你可以使用while(showlist!= NULL) 根据你的条件,它不会进入最后一个元素的while循环

答案 3 :(得分:1)

showList->next !=NULL 

此条件适用于for loop

在while循环中,您应该使用showList!=NULL,因为在退出while循环后while循环showList指向NULL