2017-05-14 74 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

如果你有一个循环链表,你应该保存的参考列表的第一个节点,你开始你的迭代和前接下来,你是在经过它的时候,就比较当前光标节点与参考,如果他们是平等的(应该是在这种情况下,真正的),那么这就是你的止损条件