创建一个可理解的双链表

时间:2011-03-25 03:36:26

标签: c# linked-list double

我正在尝试创建一个通用的双向链表,而我无法理解它。有没有人有一个使用C#非常简单的双链接列表实现的例子?

由于

3 个答案:

答案 0 :(得分:5)

在支持Add(),索引器和ToString()的简单通用双向链接列表下方 - 其余部分留给读者练习 - 这应该会给你一个想法。

public class LinkedList<T>
{
   protected LinkedListNode<T> root = null;
   protected LinkedListNode<T> last = null;
   public LinkedList()
   {
   }

   public string ToString()
   {
       StringBuilder sb = new StringBuilder();
       var node = root;
       while (node != null)
       {
           sb.Append("{ " + node.Data.ToString() + " } ");
           node = node.Next;
       }
       return sb.ToString();
   }

   public T this[int index]
   {
        get
        {
           var node = GetAt(index);
           if(node == null)
                throw new ArgumentOutOfRangeException();
           return node.Data;
        }
        set
        {
           var node = GetAt(index);
           if (node == null)
                throw new ArgumentOutOfRangeException();
           node.Data = value;
        }
   }

    private LinkedListNode<T> GetAt(int index)
    {
        var current = root;
        for(int i=0;i<index;i++)
        {
            if (current == null)
                return null;
            current = current.Next;
        }
        return current;
    }

    public void Add(T data)
    {
        if (root == null)
        {
            root = new LinkedListNode<T>(data);
            last = root;
        }
        else
        {
            last.Next = new LinkedListNode<T>(data);
            last.Next.Previous = last;
            last = last.Next;
        }
    }
}

public class LinkedListNode<T>
{
    public T Data {get;set;}

    public LinkedListNode(T data)
    {
        Data = data;
    }

    public LinkedListNode<T> Next { get; set; }
    public LinkedListNode<T> Previous { get; set; }
}

答案 1 :(得分:2)

System.Collections.Generic.LinkedList<T>是一个通用的双向链表。您可以参考MSDN文档,了解它的工作原理以及需要公开的方法/属性。

答案 2 :(得分:1)

除了MSDN WikipediaWikibooks之外,还有一些关于双重​​链接列表的结构和形式的非常有用的信息。