我正在尝试遍历链表并使用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");
}
答案 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