Reorder List – Solution & Complexity

1. Recognize the Pattern

The key pattern is: Split, reverse the second half, then weave halves. Identify the state and invariant before coding.

2. Build the Algorithm

Advance one state transition at a time. Mark or update state before exploring dependent work.

3. Check Edge Cases

Test empty or minimal input, skewed shapes, duplicates where allowed, and impossible outcomes.

4. Solution and Complexity

Time: O(n). Space: O(1).

def reorder_list(head: ListNode) -> ListNode:
    slow = fast = head
    while fast and fast.next:
        slow, fast = slow.next, fast.next.next
    previous, current = None, slow.next
    slow.next = None
    while current:
        current.next, previous, current = previous, current, current.next
    first, second = head, previous
    while second:
        next_first, next_second = first.next, second.next
        first.next = second
        second.next = next_first
        first, second = next_first, next_second
    return head

FAQ