我正在尝试遍历链表并使用节点显示每个节点的值。我在这里使用 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
,您应该使用showList!=NULL
因为在 while 循环中 showList 在退出 while 循环后指向NULL
您可以使用 while(showlist != NULL)根据您的条件,它不会进入最后一个元素的 while 循环