LeetCode #328 Odd Even Linked List
Problem
Given a singly linked list, group all odd nodes together followed by the even nodes. Please note here we are talking about the node number and not the value in the nodes.
You should try to do it in place. The program should run in O(1) space complexity and O(nodes) time complexity.
Example 1:
Input: 1->2->3->4->5->NULL
Output: 1->3->5->2->4->NULL
Example 2:
Input: 2->1->3->5->6->4->7->NULL
Output: 2->3->6->7->1->5->4->NULL
Note:
- The relative order inside both the even and odd groups should remain as it was in the input.
- The first node is considered odd, the second node even and so on …
Solution
Use two pointers for tracking tails of odd list and even list. In each iteration, we have:
- New odd tail is the next node of old even tail
- New even tail is the next node of new odd tail
It’s noted to make sure even tail and the next node of even tail exist.
Complexity
At each iteration we will jump two nodes for assigning new odd and even tail. So time complexity is O(n/2) = O(n) if n
denotes to counts of nodes in this linked list.
It’s trivial that it only uses O(1) extra space.