標籤:java leetcode 鏈表
Given a singly linked list L: L0→L1→…→Ln-1→Ln,
reorder it to: L0→Ln→L1→Ln-1→L2→Ln-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}.
基本思想:從鏈表中間這段,對後一段的鏈表作reverse,然後間隔插入到前一段的鏈表中。
/** * 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) return;ListNode ln = head;int len = 0;while(ln!=null){len++;ln = ln.next;}int mid = (len-1)/2;ListNode midNode = head;while(mid!=0){midNode = midNode.next;mid--;}ListNode insert = reverse(midNode.next);midNode.next = null;ListNode bInsert = head;while(insert!=null){ListNode inext = insert.next;ListNode bnext = bInsert.next;bInsert.next = insert;insert.next = bnext;bInsert = bnext;insert = inext;}}private ListNode reverse(ListNode head){ListNode pre = null;ListNode cur = head;while(cur!=null){ListNode next = cur.next;cur.next = pre;pre = cur;cur = next;}return pre;}}
[Leetcode]Reorder List