单链表-反转

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;
}
}
}

posted @ 2011-01-17 14:35  kntao  阅读(172)  评论(0)    收藏  举报