链表的倒置

        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,-7}{1}",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();
        }
    }

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值