Reverse Linked List II – Solution & Complexity
Solution Walkthrough
Step 1: Recognize the Pattern
The key pattern is: a dummy-node walk to the node just before
left, then repeatedly splicing the next node to the front of the reversed segment. Identify the state and invariant before coding.Step 2: Build the Algorithm
Advance one state transition at a time. Mark or update state before exploring dependent work.
Step 3: Check Edge Cases
Test empty or minimal input, skewed shapes, duplicates where allowed, and impossible outcomes.
Step 4: Solution and Complexity
Time: O(n) — a single pass to reach
leftplus one pass to reverse the segment. Space: O(1) auxiliary in Python/JavaScript/Java/Go, which splice pointers in place. The Rust implementation instead collects values into aVecand rebuilds the list (O(n) auxiliary) because the classic pointer splice runs into move/borrow conflicts onOption<Box<ListNode>>chains — see the inline comment on the Rust solution.All 5 languages below run and submit against the remote judge for this problem — Java/Go/Rust use the same real ListNode structural-type support the judge added for the rest of the linked-list/tree track.