【Leetcode】Reorder List

来源:互联网 发布:蹭网器密码破解软件 编辑:程序博客网 时间:2024/06/06 02:51

【题目】

Given a singly linked list L: L0L1→…→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}.



【思路】

三步走

1.找到中间点

2.从中间到最后的reverse

3.插值



【代码】

public class Solution {  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
原创粉丝点击