单链表反转

大王女王大人若是看不懂的话,请把注释去掉。

using System;

namespace ConsoleApplication10
{
    class Program
    {
        static void Main(string[] args)
        {
            Node headNode = new Node(0);
            Node preNode = headNode;
            Node currentNode;
            for (int i = 1; i < 10; i++)
            {
                currentNode = new Node(i);
                preNode.nextNode = currentNode;
                preNode = currentNode;
            }
            headNode.outPut();
            Console.WriteLine("---------------------翻转后---------------------");

            ////这里不加ref的话,会拷贝一份指针进方法,导致headNode的值不被改变
            reverse(ref headNode);
            headNode.outPut();

            Console.Read();
        }
        public static void reverse(ref Node head)
        {
            if (head != null && head.nextNode !=null)
            {
                Node pre = head;
                Node current = head.nextNode;
                Node next;

                //Console.WriteLine("最初:  pre:" + pre.number.ToString() + "  current:" + current.number.ToString());
                //Console.WriteLine("---------------------");

                pre.nextNode = null;
                while (current != null)
                {
                    next = current.nextNode;
                    //Console.WriteLine("翻转指针前:   pre:" + pre.number.ToString() + "  current:" + (current != null ? current.number.ToString() : string.Empty) + "   next:" + (next != null ? next.number.ToString() : string.Empty));

                    current.nextNode = pre;
                    pre = current;
                    current = next;

                    //Console.WriteLine("翻转指针后:   pre:" + pre.number.ToString() + "  current:" + (current != null ? current.number.ToString() : string.Empty) + "   next:" + (next != null ? next.number.ToString() : string.Empty));
                    //Console.WriteLine("---------------------");

                }
                head = pre;
            }
        }
    }
    class Node
    {
        public Node(int i)
        {
            this.number = i;
        }
        public int number;
        public Node nextNode;
        public void outPut()
        {
            Console.WriteLine(this.number);
            if (this.nextNode != null)
            {
                this.nextNode.outPut();
            }
        }
    }
}

 

posted @ 2013-05-27 17:37  JeanGe  阅读(168)  评论(0编辑  收藏  举报