同过泛型实现的链表(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/>");
            }

posted on 2011-10-27 14:54  冰危节奏  阅读(122)  评论(0)    收藏  举报

导航