??????? public static void ReOrder(ref Node listHead)
??????? {
??????????? if (listHead == null)
??????????? {
??????????????? throw new ArgumentNullException("list Head is null!");
??????????? }
??????????? Node leftHead = listHead;
??????????? Node rightHead = null;
??????????? Node current = leftHead.Next;
??????????? leftHead.Next = null;
??????????? while (current != null)
??????????? {
??????????????? rightHead = current.Next;
??????????????? current.Next = leftHead;
??????????????? leftHead = current;
??????????????? current = rightHead;
??????????? }
??????????? listHead = leftHead;
??????? }
?
下面是程序详细代码:
?
?? class Node
??? {
??????? private int _value = 0;
??????? public int NodeValue
??????? {
??????????? get { return this._value; }
??????????? set { this._value = value; }
??????? }
??????? private Node _next = null;
??????? public Node Next
??????? {
??????????? get { return this._next; }
??????????? set { this._next = value; }
??????? }
??????? public Node()
??????? {
??????????? this._value = 0;
??????? }
??????? public Node(int nodeValue)
??????? {
??????????? this._value = nodeValue;
??????? }
??? }
?
??? class ListUtil
??? {
??????? public static void ReOrder(ref Node listHead)
??????? {
??????????? listHead = ReOrder2(listHead);
??????? }
??????? public static void ReOrder(Node listHead)
??????? {
??????????? listHead = ReOrder2(listHead);
??????? }
??????? private static Node ReOrder2(Node listHead)
??????? {
??????????? if (listHead == null)
??????????? {
??????????????? throw new ArgumentNullException("list Head is null!");
??????????? }
??????????? Node leftHead = listHead;
??????????? Node rightHead = null;
??????????? Node current = leftHead.Next;
??????????? leftHead.Next = null;
??????????? while (current != null)
??????????? {
??????????????? rightHead = current.Next;
??????????????? current.Next = leftHead;
??????????????? leftHead = current;
??????????????? current = rightHead;
??????????? }
??????????? return leftHead;
??????? }
??????? public static void ShowListInfo(Node listHead)
??????? {
??????????? if (listHead == null)
??????????? {
??????????????? throw new ArgumentNullException("listHead");
??????????? }
??????????? Console.WriteLine("{0,-7}{1}","Index","Value");
??????????? int i = 0;
??????????? while (listHead != null)
??????????? {
??????????????? i++;
??????????????? Console.WriteLine("{0,i,listHead.NodeValue);
??????????????? listHead = listHead.Next;
??????????? }
??????? }
??? }
?
??? class Program
??? {
??????? static void Main(string[] args)
??????? {
??????????? Node a = new Node(1);
??????????? Node b = new Node(2);
??????????? Node c = new Node(3);
??????????? Node d = new Node(4);
??????????? Node e = new Node(5);
??????????? Node f = new Node(6);
??????????? a.Next = b;
??????????? b.Next = c;
??????????? c.Next = d;
??????????? d.Next = e;
??????????? e.Next = f;
??????????? f.Next = null;
??????????? Console.WriteLine("Before Reorder:");
??????????? ListUtil.ShowListInfo(a);
?????????? //ListUtil.ReOrder(ref a);
?????????? //Console.WriteLine("After Reorder *With* ref:");
??????????? ListUtil.ReOrder(a);
??????????? Console.WriteLine("After Reorder *Without* ref:");
??????????? ListUtil.ShowListInfo(a);
??????????? Console.Read();
??????? }
??? }
?
?
