2016-03-05 105 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循環後