/// <summary>
/// 模拟单链表
/// </summary>
class LinkNode
{
public object data;
public LinkNode next;
public LinkNode(object adata)
{
this.data = adata;
}
}
class LinkUtil
{
/// <summary>
/// 反转单链表,用两个辅助节点
/// </summary>
/// <param name="node"></param>
/// <returns></returns>
public static LinkNode Inverse(LinkNode node)
{
// r,q,p 一步一步,像走路一样
// p总是指向下一个节点
//q 用来跟上p
//r 用来存储断开的节点
LinkNode r = null;
LinkNode q = null;
LinkNode p = node;
while (p != null)
{
r = q;
q = p;
p = p.next;
q.next = r;
}
return q;
}
/// <summary>
/// 打印单链表
/// </summary>
/// <param name="list"></param>
public static void PrintList(LinkNode list)
{
LinkNode p=list;
while (p != null)
{
Console.WriteLine(p.data);
p = p.next;
}
}
/// <summary>
/// 测试
/// </summary>
/// <param name="args"></param>
static void Main(string[] args)
{
LinkNode n1 = new LinkNode("1");
LinkNode n2 = new LinkNode("2");
LinkNode n3 = new LinkNode("3");
LinkNode n4 = new LinkNode("4");
n1.next = n2;
n2.next = n3;
n3.next = n4;
Console.WriteLine("before reverse:");
PrintList(n1);
Console.WriteLine("after reverse:");
LinkNode head= Inverse(n1);
PrintList(head);
Console.Read();
}
}