繁体   English   中英

创建一个可理解的双链表

[英]Creating a understandable Doubly Linked List

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

谢谢

在支持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; }
}

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM