[Leetcode][JAVA] Reorder List
2014-10-07 23:04
363 查看
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
比较容易思考且实现的一个思路是, 将链表从中心拆成两半,后一半全部反向连接,然后前一半和后一半一个一个节点交替连接。
拆分阶段使用快慢指针方法即可得到两个平分的链表。
反向和合并阶段就是很常规的链表操作。
代码:
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}.
比较容易思考且实现的一个思路是, 将链表从中心拆成两半,后一半全部反向连接,然后前一半和后一半一个一个节点交替连接。
拆分阶段使用快慢指针方法即可得到两个平分的链表。
反向和合并阶段就是很常规的链表操作。
代码:
public void reorderList(ListNode head) { if(head==null || head.next==null) return; //split ListNode fast = head; ListNode slow = head; while(true) { fast = fast.next.next; if(fast==null || fast.next==null) break; slow = slow.next; } fast = slow.next; slow.next = null; slow = head; //reverse fast fast = reverse(fast); //insert while(slow!=null && fast!=null) { ListNode snext=slow.next; ListNode fnext=fast.next; slow.next=fast; if(snext!=null) fast.next=snext; slow = snext; fast = fnext; } } public ListNode reverse(ListNode head) { ListNode cur = head; ListNode pre = null; while(cur!=null) { ListNode temp = cur.next; cur.next = pre; pre = cur; cur = temp; } return pre; }
相关文章推荐
- Reorder List leetcode java
- Java for LeetCode 143 Reorder List
- leetcode reorder-list(java实现)
- LeetCode:Reorder List C++与Java实现
- LeetCode143之ReorderList的Java题解
- Reorder List leetcode java
- LeetCode:Reorder List
- [leetcode]Reorder List
- LeetCode Reorder List 新鲜出炉问题的解答
- LeetCode Reorder List O(n) space空间解法
- Leetcode: Reorder List
- [LeetCode] Reorder List
- LeetCode | Reorder List
- Leetcode: Reorder List
- leetcode -- Reorder List
- leetcode - Reorder List
- Reorder List @LeetCode
- Reorder List 链表首尾交叉排列@LeetCode
- Leetcode: Reorder List
- LeetCode题解:Reorder List