创建一个非常简单的单一循环列表C#

Jos*_*eph 2 c# linked-list circular-list data-structures

有没有人有一个使用C#非常简单地实现循环链​​接列表的例子?

我有这个链表但我不知道怎么做特别的:

    public class LinkedList
    {
        public class Node
        {
            public Node next;
            public Object data;
        }

        private Node head;

        public void Add(Object data)
        {
            Node toAdd = new Node();
            toAdd.data = data;
            Node current = head;                
            current.next = toAdd;
        }

    }
Run Code Online (Sandbox Code Playgroud)

谢谢.

Bol*_*ock 6

要使链接列表为循环,您的尾节点应引用头节点.因此,只需在Add()方法结束时执行此操作:

toAdd.next = head;
Run Code Online (Sandbox Code Playgroud)

请注意,您的Add()方法不会遍历链表中的所有节点,它只是这样做

Node current = head;
Run Code Online (Sandbox Code Playgroud)

因此,如果您尝试添加多个节点,则只更新头节点以指向每个新节点,替换每次Add()调用中的任何引用,并且链接列表最多只包含2个节点.

您可以像这样迭代每个节点(这取代了我上面提到的那一行):

Node current = head;

while (current.next != head)
{
    current = current.next;
}
Run Code Online (Sandbox Code Playgroud)

current无论您添加到链接列表的节点数量多少,现在都将代表您的尾节点.然后,您可以追加新的尾节点,将旧的一个点指向新的尾节点,然后将新的一个点指向您的头节点.

另一件事:您当前的实现Add()要求您使用头节点初始化链接列表,否则NullReferenceException如果您尝试添加任何内容,将会引发.您可以编写构造函数来轻松处理此问题.