【问题标题】:Creating a understandable Doubly Linked List创建一个可以理解的双向链表
【发布时间】:2011-07-22 15:30:10
【问题描述】:

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

谢谢

【问题讨论】:

    标签: c# linked-list double


    【解决方案1】:

    下面是一个支持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; }
    }
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-07-18
          • 1970-01-01
          • 2019-09-02
          • 2021-03-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-11-01
          相关资源
          最近更新 更多