Reorder Nodes by Odd/Even Index
Problem
Group all nodes at odd positions (1st, 3rd, 5th, …) before all nodes at even positions, preserving the relative order within each group. Use two interleaved chains and stitch them together at the end.
Input
1 → 2 → 3 → 4 → 5 → nullOutput
1 → 3 → 5 → 2 → 4 → nullOdd-index nodes first (1, 3, 5), then even-index nodes (2, 4).
def odd_even(head):
if head is None: return None
odd, even = head, head.next
even_head = even
while even and even.next:
odd.next = even.next
odd = odd.next
even.next = odd.next
even = even.next
odd.next = even_head
return head
function oddEven(head) {
if (!head) return null;
let odd = head, even = head.next, evenHead = even;
while (even && even.next) {
odd.next = even.next;
odd = odd.next;
even.next = odd.next;
even = even.next;
}
odd.next = evenHead;
return head;
}
class Solution {
public ListNode oddEven(ListNode head) {
if (head == null) return null;
ListNode odd = head, even = head.next, evenHead = even;
while (even != null && even.next != null) {
odd.next = even.next;
odd = odd.next;
even.next = odd.next;
even = even.next;
}
odd.next = evenHead;
return head;
}
}
ListNode* oddEven(ListNode* head) {
if (!head) return nullptr;
ListNode *odd = head, *even = head->next, *evenHead = even;
while (even && even->next) {
odd->next = even->next;
odd = odd->next;
even->next = odd->next;
even = even->next;
}
odd->next = evenHead;
return head;
}