我有一个双链表,我想用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