206. Reverse Linked List O(n) · In-Place · Tuple Swap
Source Code
Before
After (building…)
Linked List — pointer state
Tuple Swap — curr.next, prev, curr = prev, curr, curr.next
curr.next =
← was pointing forward
prev =
← curr becomes new prev
curr =
← advance to next
Waiting to start…

Reversed list

0 / 0
Step Log
How the 3-pointer dance works
Why tuple swap works
Python evaluates ALL right-hand values FIRST, then assigns. So curr.next.next is captured before curr.next is overwritten. No temp variable needed.
Why return prev not curr
When loop exits, curr = None (went past end). prev holds the last processed node = new head of reversed list.
Memory — O(1) space
Only 2 pointers (prev, curr) used. No new nodes created. Pointers on existing nodes are flipped in-place. Original nodes stay in memory.
Edge cases handled
Empty list: head=None → while never runs → returns prev=None. Single node: one iteration flips .next to None, returns that node.