Reorder List – Solution & Complexity

Solution Walkthrough

  1. Step 1: Recognize the Pattern

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

  2. Step 2: Build the Algorithm

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

  3. Step 3: Check Edge Cases

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

  4. Step 4: Solution and Complexity

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

    Java/Go/Rust below are reference solutions for learning the pattern in those languages; only Python and JavaScript can be run and submitted for this problem, since the remote judge doesn't support the ListNode structure yet.

    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