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

创建一个非常简单的单循环列表C#,c#,data-structures,linked-list,circular-list,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)

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

    }

谢谢。

要使链接列表是循环的,尾部节点应该引用头部节点。因此,只需在
Add()
方法的末尾执行此操作:

toAdd.next = head;

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

Node current = head;
因此,如果您尝试添加多个节点,则只有头部节点将更新为指向每个新节点,并替换它在每个
add()
调用中的引用,并且您的链接列表将始终最多只包含2个节点

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

现在,
current
将代表尾部节点,无论您向链接列表中添加了多少节点。然后可以附加新的尾部节点,将旧的一点添加到新的一点,将新的一点添加回头部节点


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

无需迭代。但是您确实需要将
添加到add.next
指向旧的
当前的.next
。您是对的。我原以为
Add
的意思是在头部之后插入,但这真的没有意义。
Node current = head;

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