自定义泛型链表类

     (1)自定义泛型链表类。

    public class GenericList<T>
    {
        private class Node
        {
            //当前节点值
            private T data;
            public T Data
            {
                get { return data; }
                set { data = value; }
            }

            //节点的下一个节点
            private Node next;
            public Node Next
            {
                get { return next; }
                set { next = value; }
            }

            //节点的上一个节点
            private Node last;
            public Node Last
            {
                get { return last; }
                set { last = value; }
            }

            public Node(T t)
            {
                data = t;
                next = null;
            }
        }

        private Node firstNode;
        private Node lastNode;

        public void AddNode(T t)
        {
            Node node = new Node(t);
            node.Last = lastNode;

            if (lastNode != null)
                lastNode.Next = node;

            lastNode = node;

            if (firstNode == null)
            {
                firstNode = node;
            }
        }

        //要在自定义泛型集合上迭代
        //必须实现该接口
        public IEnumerator<T> GetEnumerator()
        {
            Node current = firstNode;
            while (current != null)
            {
                //yield return表达式以枚举对象返回
                yield return current.Data;
                current = current.Next;
            }
        }
    }

        (2)自定义泛型链表类调用。

    class GenericListTestTwo
    {
        static void Main()
        {
            // 类型参数为int
            GenericList<int> list = new GenericList<int>();
            for (int a = 0; a < 5; a++)
            {
                list.AddNode(a);
            }
            foreach (int i in list)
            {
                System.Console.WriteLine(i);
            }

            //类型参数为string
            GenericList<string> strList = new GenericList<string>();
            strList.AddNode("First Node");
            strList.AddNode("Second Node");
            foreach(string s in strList)
            {
                System.Console.WriteLine(s);
            }


            Console.Read();
        }
    }

  输出如下:

posted @ 2012-07-10 20:46  蒹葭白露  阅读(631)  评论(0编辑  收藏  举报