C - 未打印链表的最后一个节点值



我正在尝试遍历链表并使用节点显示每个节点的值。我在这里使用 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");
}

您可以将条件更改为:

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);

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

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

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

showList->next !=NULL 

此条件适用于for loop

在 while 循环中

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

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

相关内容

  • 没有找到相关文章

最新更新