C# 双向链表 反转

两个方式:一种是对折 互换值,一种是一个一个取出来给新的链表赋值,再引用切换

        public void ReverseLinkedList1<T>(LinkedList<T> linkedList)
        {
            LinkedListNode<T> firstNode;
            LinkedListNode<T> secondNode; 
            int numberOfRun;

            LinkedListNode<T> tail = linkedList.First;

            while (tail.Next != null)
                tail = tail.Next;

            firstNode = linkedList.First;
            secondNode = tail;
            numberOfRun = linkedList.Count / 2;

            T tempObject; 
            for (int i = 0; i < numberOfRun; i++)
            {
                tempObject = firstNode.Value;
                firstNode.Value = secondNode.Value;
                secondNode.Value = tempObject;
                firstNode = firstNode.Next;
                secondNode = secondNode.Previous;
            }
        }

        public void ReverseLinkedList2<T>(LinkedList<T> linkedList)
        {
            LinkedList<T> copyList = new LinkedList<T>();
            LinkedListNode<T> start = linkedList.First;
            while (start != null)
            {
                copyList.AddFirst(start.Value);
                start = start.Next;
            }

            linkedList = copyList;
        }

 

posted @ 2019-05-23 13:30  TeemoHQ  阅读(391)  评论(0)    收藏  举报