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

时间:2011-04-01 20:19:59

标签: c# data-structures linked-list circular-list

有没有人有一个使用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;
        }

    }

感谢。

1 个答案:

答案 0 :(得分:6)

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

toAdd.next = head;

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

Node current = head;

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

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

Node current = head;

while (current.next != head)
{
    current = current.next;
}

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

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