单链表-反转
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;
}
}
}