標籤:
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}.
解題思路一:
每次將Ln換到前面,得到L0→Ln→L1→L2→L3→,然後對L1使用相同操作,JAVA實現如下:
public void reorderList(ListNode head) {ListNode headCopy = head;while (headCopy != null && headCopy.next != null&& headCopy.next.next != null) {ListNode temp = headCopy;while (temp.next.next != null)temp = temp.next;temp.next.next = headCopy.next;headCopy.next = temp.next;temp.next = null;temp = headCopy.next.next;headCopy=headCopy.next.next;}}
結果TLE
解題思路二:
空間換時間,將所有的node存到一個list中,然後每次操作list頭尾兩個node即可,JAVA實現如下:
public void reorderList(ListNode head) {LinkedList<ListNode> list = new LinkedList<ListNode>();ListNode headCopy = head,end = head;while (headCopy != null) {list.add(headCopy);headCopy = headCopy.next;}while(list.size()>2){headCopy=list.poll();end=list.get(list.size()-1);list.remove(list.size()-1);headCopy.next=end;end.next=list.peek();list.get(list.size()-1).next=null;} }
Java for LeetCode 143 Reorder List