143. Reorder List**

来源:互联网 发布:财务预算软件 编辑:程序博客网 时间:2024/06/06 11:44

Given a singly linked list LL0L1→…→Ln-1Ln,

reorder it to: L0LnL1Ln-1L2Ln-2→…

You must do this in-place without altering the nodes' values.

For example,
Given {1,2,3,4}, reorder it to {1,4,2,3}.

public void reorderList(ListNode head) {            if(head==null||head.next==null) return;                        //Find the middle of the list            ListNode p1=head;            ListNode p2=head;            while(p2.next!=null&&p2.next.next!=null){                 p1=p1.next;                p2=p2.next.next;            }                        //Reverse the half after middle  1->2->3->4->5->6 to 1->2->3->6->5->4            ListNode preMiddle=p1;            ListNode preCurrent=p1.next;            while(preCurrent.next!=null){                ListNode current=preCurrent.next;                preCurrent.next=current.next;                current.next=preMiddle.next;                preMiddle.next=current;            }                        //Start reorder one by one  1->2->3->6->5->4 to 1->6->2->5->3->4            p1=head;            p2=preMiddle.next;            while(p1!=preMiddle){                preMiddle.next=p2.next;                p2.next=p1.next;                p1.next=p2;                p1=p2.next;                p2=preMiddle.next;            }        }


0 0
原创粉丝点击