有没有人有一个使用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;
}
}
感谢。
答案 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
。您可以编写构造函数来轻松处理此问题。