使用泛型实现简单链表
首先创建一个泛型类LinkedListNode,该类型包含了一个属性Value,可以通过初始化进行赋值。还包含对上一个元素和下一个元素的引用。
public class LinkedListNode<T> { public LinkedListNode(T value) { this.value = value; } public T value { get; private set; } public LinkedListNode<T> Next { get; internal set; } public LinkedListNode<T> Prev { get; internal set; } }
然后创建一个LinkedList类型,该类包含了对链表首尾元素的引用。还包含一个添加元素到尾部的方法,以及GetEnumrator()方法,以便通过foreach进行遍历元素。
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) { var newNode = new LinkedListNode<T>(node); if (First == null) { First = newNode; Last = First; } else { LinkedListNode<T> previous = Last; Last.Next = newNode; Last = newNode; Last.Prev = previous; } return newNode; } public IEnumerator<T> GetEnumerator() { LinkedListNode<T> current = First; while (current != null) { yield return current.value; current = current.Next; } } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } }
现在就可以对任意数据类型使用这个简易链表进行操作了。
static void Main(string[] args) { LinkedList<int> arr = new LinkedList<int>(); arr.AddLast(0); arr.AddLast(1); arr.AddLast(2); foreach (var item in arr) { Console.WriteLine(item); } LinkedList<string> sArr = new LinkedList<string>(); sArr.AddLast("hello 1"); sArr.AddLast("hello 2"); sArr.AddLast("hello 3"); foreach (var item in sArr) { Console.WriteLine(item); } Console.ReadKey(); }