2

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

我有这个链接列表,但我不知道如何使它成为 cicular:

    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;
        }

    }

谢谢。

4

1 回答 1

6

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

toAdd.next = head;

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

Node current = head;

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

您可以像这样遍历每个节点(这替换了我上面提到的行):

Node current = head;

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

current无论您将多少节点添加到链表中,现在都将代表您的尾节点。然后你可以追加新的尾节点,使旧的指向新的,新的指向你的头节点。

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

于 2011-04-01T20:22:04.387 回答