我有一個雙鏈表,我想用Console.WriteLine()
進行打印。我遇到的問題是,我知道如何根據停止條件(即node.next爲空時)僅用Next節點打印列表,但這是一個帶有Next和Previous的雙鏈表,其中每個列表中的節點連接到另一個節點,因此不存在node.next == null
爲True的情況。打印雙鏈表的內容
這種類型的列表中的停止條件是什麼?現在我有一個無限循環,一遍又一遍地打印列表。
我有一個雙鏈表,我想用Console.WriteLine()
進行打印。我遇到的問題是,我知道如何根據停止條件(即node.next爲空時)僅用Next節點打印列表,但這是一個帶有Next和Previous的雙鏈表,其中每個列表中的節點連接到另一個節點,因此不存在node.next == null
爲True的情況。打印雙鏈表的內容
這種類型的列表中的停止條件是什麼?現在我有一個無限循環,一遍又一遍地打印列表。
你給的解釋是約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);
}
謝謝!我明白我的錯誤,並且我修正了它 – Dolev
印刷邏輯如果你迭代在1個方向的雙向鏈表(如:總是下一個,或總是以前)應是一個有限迭代。
如果您仍然有無限的迭代就意味着你在列表中循環。通過將同一節點作爲同一鏈表中2個或更多節點的「下一個」或「前一個」來獲得循環。
如果你有一個循環鏈表,你應該保存的參考列表的第一個節點,你開始你的迭代和前接下來,你是在經過它的時候,就比較當前光標節點與參考,如果他們是平等的(應該是在這種情況下,真正的),那麼這就是你的止損條件
雙向鏈表並不意味着不會結束它。通知名單不會結束。你有哪一個?對於通告,當你開始使用第一個時,你會停下來。 –
一個雙向鏈表絕對有一個結束 - 其中'Next'爲'null'的項。 – xxbbcc
即使您將其稱爲雙重鏈接,但它是循環的,您仍然可以跟蹤您開始打印的項目。一旦你到達那個項目,這意味着你已經打印了一切。 – CodingYoshi