2017-05-14 98 views
-2

我有一個雙鏈表,我想用Console.WriteLine()進行打印。我遇到的問題是,我知道如何根據停止條件(即node.next爲空時)僅用Next節點打印列表,但這是一個帶有Next和Previous的雙鏈表,其中每個列表中的節點連接到另一個節點,因此不存在node.next == null爲True的情況。打印雙鏈表的內容

這種類型的列表中的停止條件是什麼?現在我有一個無限循環,一遍又一遍地打印列表。

+2

雙向鏈表並不意味着不會結束它。通知名單不會結束。你有哪一個?對於通告,當你開始使用第一個時,你會停下來。 –

+0

一個雙向鏈表絕對有一個結束 - 其中'Next'爲'null'的項。 – xxbbcc

+0

即使您將其稱爲雙重鏈接,但它是循環的,您仍然可以跟蹤您開始打印的項目。一旦你到達那個項目,這意味着你已經打印了一切。 – CodingYoshi

回答

1

你給的解釋是約CircularLinkedList

而且在DoublyLinkedList最後一個元素的next應該有「空」。

現在,如果你的問題是關於CircularLinkedList你應該有一個終點指針 比打印,直到tmp.next達到end指針。

更新1

一般來說,這應該是CircularLinkedList

public void PrintAll() 
{ 
    Node<T> tmp = start; 
    do 
    { 
     Console.WriteLine(tmp.data.ToString()); 
     tmp = tmp.next; 
    } while (tmp != end.next); 
} 
+0

謝謝!我明白我的錯誤,並且我修正了它 – Dolev

0

印刷邏輯如果你迭代在1個方向的雙向鏈表(如:總是下一個,或總是以前)應是一個有限迭代。

如果您仍然有無限的迭代就意味着你在列表中循環。通過將同一節點作爲同一鏈表中2個或更多節點的「下一個」或「前一個」來獲得循環。

0

在一個圓形的列表中仍然有一個「開端」,這也是它的「結束」。所以,你開始從節點A打印,並且打印,直到該節點的下一個指針指向A.

+0

謝謝,我明白我的錯誤,並且我像你說的那樣修復了它 – Dolev

0

如果你有一個循環鏈表,你應該保存的參考列表的第一個節點,你開始你的迭代和前接下來,你是在經過它的時候,就比較當前光標節點與參考,如果他們是平等的(應該是在這種情況下,真正的),那麼這就是你的止損條件