创建一个非常简单的单循环列表C#
有人举过一个使用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)
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;
}