打印双链表的内容

Printing the contents of a double linked list

我有一个双链表,我想使用 Console.WriteLine() 打印它。我遇到的问题是我知道如何根据停止条件(即 node.next 为空时)打印仅包含 Next 节点的列表,但这是一个包含 Next 和 Previous 的双链表,列表中的每个节点都连接到另一个节点,因此没有 node.next == null 为 True 的情况。

这种列表的停止条件是什么?现在我有一个无限循环,一遍又一遍地打印列表。

您给出的解释是关于CircularLinkedList

DoublyLinkedList 中最后一个元素的 next 应该有 'null'。

现在如果你的问题是关于 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);
}

如果你在一个方向上迭代双链表(例如:总是下一个,或者总是前一个)应该有一个有限的迭代。

如果你仍然有一个无限迭代,这意味着你在列表中有一个循环。使同一个链表中2个或多个节点的"next"或"previous"得到一个环

循环列表中还有一个"beginning",也是它的"end"。所以你从节点 A 开始打印,一直打印到节点的下一个指针指向 A。

如果你有一个循环链表,你应该在开始迭代之前保存对列表第一个节点的引用,下次你传递它时,只需将当前光标节点与该引用进行比较如果它们相等(在那种情况下应该是真的),那么这就是你的停止条件