2011-04-01 57 views
2

有没有人有一个简单的实现使用C#的循环链表的例子?创建一个非常简单的单循环列表C#

我有这个链表,但我不知道如何makeit 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; 
     } 

    } 

感谢。

回答

6

对于你的链表是圆形的,你的尾节点应该引用头节点。所以它只是一个在你Add()方法结束这样的事情:

toAdd.next = head; 

请注意,您Add()方法不通过你的链接列表中的所有节点重复,它根本

Node current = head; 

因此,如果您尝试添加多个节点,只有头节点将更新为指向每个新节点,替换每个调用中提及的任何引用,并且链接列表总是最多只包含2个节点。

你可以通过这样的每个节点迭代(这取代了我上面提到的线):

Node current = head; 

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

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

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

+0

你不需要迭代。但是你需要将'toAdd.next'指向旧的'current.next'。 – 2011-04-01 20:26:43

+0

@Matthew Flaschen:为什么不呢? – BoltClock 2011-04-01 20:43:11

+0

你是对的。我认为'添加'是为了在头后插入,但这确实没有意义。 – 2011-04-01 20:48:07