Step 1: Build min heap with first nodes of all lists: 1, 2, 3
MinHeap: [1, 2, 3]
Merged list: null
Why: We start by knowing the smallest elements from each list to pick the smallest overall
Step 2: Extract min (1) from heap, add to merged list, push next node (4) from List1 into heap
MinHeap: [2, 3, 4]
Merged list: 1 -> null
Why: We add smallest element to result and replace it with next from same list
Step 3: Extract min (2), add to merged list, push next node (5) from List2
MinHeap: [3, 4, 5]
Merged list: 1 -> 2 -> null
Why: Continue picking smallest and replenishing heap
Step 4: Extract min (3), add to merged list, push next node (6) from List3
MinHeap: [4, 5, 6]
Merged list: 1 -> 2 -> 3 -> null
Why: Keep merging by always choosing smallest current node
Step 5: Extract min (4), add to merged list, push next node (7) from List1
MinHeap: [5, 6, 7]
Merged list: 1 -> 2 -> 3 -> 4 -> null
Why: Replace extracted node with next from same list
Step 6: Extract min (5), add to merged list, push next node (8) from List2
MinHeap: [6, 7, 8]
Merged list: 1 -> 2 -> 3 -> 4 -> 5 -> null
Why: Continue until all nodes are merged
Step 7: Extract min (6), add to merged list, push next node (9) from List3
MinHeap: [7, 8, 9]
Merged list: 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> null
Why: Keep heap updated with next nodes
Step 8: Extract min (7), add to merged list, List1 has no more nodes, so do not push
MinHeap: [8, 9]
Merged list: 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> null
Why: When a list ends, just remove its node from heap
Step 9: Extract min (8), add to merged list, List2 has no more nodes
MinHeap: [9]
Merged list: 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> null
Why: Continue until heap is empty
Step 10: Extract min (9), add to merged list, List3 has no more nodes
MinHeap: []
Merged list: 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> 9 -> null
Why: All nodes merged, heap empty means done
Result: 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> 9 -> null