2016-03-05 70 views
1

我想遍历一个链接列表并显示每个节点的值使用node.I使用while循环this.But问题是链接列表的最后一个元素没有被打印出来。我不得不单独打印最后一个元素。链接列表的最后一个节点值未被打印

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

回答

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

这使程序崩溃..它不会工作。我尝试了更早的 –

+0

我不明白为什么它应该崩溃程序...也许发布错误?或者在修改后显示修改后的代码,以确保您没有添加一些不需要的更改。@ AL-zami请参阅我的编辑 – Idos

+0

索引关闭一个错误?数组上的第一项是0,第N项是N-1。或者可能改变降低后的降序。 –

2

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

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

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

+0

是最后一个节点 - >下一个被设置为空......如何解决这个问题? –

1

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

1
showList->next !=NULL 

这种情况适用于for loop

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