leetcode 146: Reorder List

来源:互联网 发布:开淘宝网店还考试吗 编辑:程序博客网 时间:2024/06/02 06:59

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}.


/** * Definition for singly-linked list. * class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { *         val = x; *         next = null; *     } * } */public class Solution {    public void reorderList(ListNode head) {        if(head==null || head.next==null) return;        ListNode p = head;        ListNode q = head;                while(q.next!=null && q.next.next!=null) {            p = p.next;            q = q.next.next;        }                // reverse the second part of list.        ListNode cur = p.next;        p.next = null;        p = null;        ListNode nxt = null;        while(cur!=null) {            nxt = cur.next;            cur.next = p;            p = cur;            cur = nxt;        }        ListNode head2 = p;                p = head;        q = head2;                while(q!=null ) {            ListNode pn = p.next;            ListNode qn = q.next;            p.next = q;            q.next = pn;            q = qn;            p = pn;        }    }}


0 0