【发布时间】:2011-07-22 15:30:10
【问题描述】:
我正在尝试创建一个通用的双向链表,但我无法理解它。有没有人有一个非常简单的使用 C# 实现双向链表的示例?
谢谢
【问题讨论】:
标签: c# linked-list double
我正在尝试创建一个通用的双向链表,但我无法理解它。有没有人有一个非常简单的使用 C# 实现双向链表的示例?
谢谢
【问题讨论】:
标签: c# linked-list double
下面是一个支持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 文档了解它的工作原理以及需要公开哪些方法/属性。
【讨论】: