C# LinkedList 泛型类的实现

上一篇中,可以存储任意类型的数据,但是在访问所有的对象时,存储的有整形数据有字符串类型,在使用循环访问所有的对象时,无法将数据转换成统一的类型,这就会报错。

具体的参考C#高级编程第8版。


现在实现一个泛型的链表,在定义对象时,指定存储的类型,在存储数据时,只存储指定类型的数据,这样就可以实现对象的统一管理。


using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;


namespace ConsoleApplication6
{
    ///


    /// 泛型类,可以包括任意类型的数据
    ///

    public class LinkedListNode
    {
        public LinkedListNode(T value)
        {
            this.Value = value;
        }


        public T Value { get;private set; }
        ///
        /// Next字段就是指向下一个节点
        /// Prev指向当前节点的上一个节点
        ///

        public LinkedListNode Next { get; internal set; }
        public LinkedListNode Prev { get; internal set; }
    }
    ///
    /// 创建链表
    ///

    public class LinkedList : IEnumerable
    {
        public LinkedListNode First { get; private set; }
        public LinkedListNode Last { get; private set; }
        ///
        /// 添加一个新的节点
        ///

        /// 新添加的数据
        /// 返回当前链表最新的节点
        public LinkedListNode AddLast(T node)
        {
            var newNode = new LinkedListNode(node);
            if (First==null)
            {
                First = newNode;
                Last = First;
            }
            else
            {
                LinkedListNode previous = Last;
                Last.Next = newNode;
                Last = newNode;
                Last.Prev = previous;
            }


            return newNode;
        }
        ///
        /// 通过GetEnumerator方法使用yield创建一个枚举器类型,遍历当前链表中的所有数据 
        ///

        ///
        public IEnumerator GetEnumerator()
        {
            LinkedListNode current = First;
            while (current!=null)
            {
                yield return current.Value;
                current = current.Next;
            }
        }




        IEnumerator IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }
    }
}


示例代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ConsoleApplication6;


namespace ConsoleApplication6
{
    class Program
    {
        static void Main(string[] args)
        {
            var list1 = new LinkedList();
            list1.AddLast(1);
            list1.AddLast(2);
            list1.AddLast(7);


            foreach (var item in list1)
            {
                Console.WriteLine(item);
            }


            Console.ReadKey();
        }
    }
}

你可能感兴趣的:(C#)