Description
You are given the head of a singly linked-list. The list can be represented as:
L0 → L1 → … → Ln - 1 → Ln
Reorder the list to be on the following form:
L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → …
You may not modify the values in the list’s nodes. Only nodes themselves may be changed.
Example 1:
Input: head = [1,2,3,4]
Output: [1,4,2,3]
Example 2:
Input: head = [1,2,3,4,5]
Output: [1,5,2,4,3]
Constraints:
- The number of nodes in the list is in the range
[1, 5 * 104]
.
1 <= Node.val <= 1000
Code
Time Complexity: O(N), Space Complexity: O(1)
用到 Reverse Linked List 中的技巧將後半段反轉,也用到快慢指標去找到中點。
不過要注意 ,上述兩者在這裡的 implementation 都將 fast pointer(p2
) 設的比一般的還要再往前一個 node。因為要將前半段的結尾的 next
設成 NULL
。
Source