同过泛型实现的链表(Enumerable,Enumerator)
1.
public class LinkedListNode<T>
{
public LinkedListNode(T value)
{
this.Value = value;
}
public T Value { get; private set; }
public LinkedListNode<T> Prev { get; internal set; }
public LinkedListNode<T> Next { get; internal set; }
}
2.
public class LinkedList<T> :IEnumerable<T>
{
public LinkedListNode<T> First { get; private set; }
public LinkedListNode<T> Last { get; private set; }
public LinkedListNode<T> addLast(T node)
{
LinkedListNode<T> newNode = new LinkedListNode<T>(node);
if (null == First)
{
newNode.Prev = null;
First = newNode;
Last = newNode;
}
else
{
newNode.Prev = Last;
Last.Next = newNode;
Last = newNode;
}
return newNode;
}
public IEnumerator<T> GetEnumerator()
{
LinkedListNode<T> current = First;
while (null != current)
{
yield return current.Value;
current = current.Next;
}
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
使用:
LinkedList<int> lstInts = new LinkedList<int>();
lstInts.addLast(1);
lstInts.addLast(2);
lstInts.addLast(3);
foreach (int i in lstInts)
{
Response.Write(i + "<br/>");
}
浙公网安备 33010602011771号