public class LinkNode<T> { T data; LinkNode<T> nextNode; public T Data { get { return data; } set { data = value; } } public LinkNode<T> NextNode { get { return nextNode; } set { nextNode = value; } } public LinkNode(T data) { this.data = data; } public LinkNode() { } public static LinkNode<string> Link() { LinkNode<string>[] link = new LinkNode<string>[8]; link[0] = new LinkNode<string>("A"); link[1] = new LinkNode<string>("B"); link[2] = new LinkNode<string>("C"); link[3] = new LinkNode<string>("D"); link[4] = new LinkNode<string>("E"); link[5] = new LinkNode<string>("F"); link[6] = new LinkNode<string>("G"); link[7] = new LinkNode<string>("H"); link[0].NextNode = link[1]; link[1].NextNode = link[2]; link[2].NextNode = link[3]; link[3].NextNode = link[4]; link[4].NextNode = link[5]; link[5].NextNode = link[6]; link[6].NextNode = link[7]; link[7].nextNode = null; return link[0]; } // 反转一个链表,循环算法。 public static LinkNode<T> ReverseLink(LinkNode<T> fNode) { if (fNode.nextNode == null) return fNode; LinkNode<T> preNode = fNode; LinkNode<T> curNode = fNode.nextNode; LinkNode<T> temp = null; preNode.nextNode = null; while (curNode != null) { temp = curNode; curNode = curNode.nextNode; temp.nextNode = preNode; temp = preNode; } return temp; } // 反转一个链表,递归算法。 public static LinkNode<T> recursionReverseLink(LinkNode<T> fNode) { Console.WriteLine("第一次递归的数据:{0}", fNode.Data); if (fNode == null || fNode.nextNode == null) return fNode; else { LinkNode<T> n = recursionReverseLink(fNode.nextNode); Console.WriteLine("第二次回归的数据:{0}", fNode.Data); fNode.nextNode.nextNode = fNode; fNode.nextNode = null; return n; } } }