| 1 | Create dummy node and set current to dummy | dummy(0) -> null | current = dummy | dummy(0) -> null |
| 2 | Compare l1.val=1 and l2.val=1 | l1:1->2->4, l2:1->3->4 | current.next = l1, l1 = l1.next (2) | dummy(0) -> 1 -> null |
| 3 | Move current to current.next (1) | dummy(0) -> 1 -> null | current = current.next (1) | dummy(0) -> 1 -> null |
| 4 | Compare l1.val=2 and l2.val=1 | l1:2->4, l2:1->3->4 | current.next = l2, l2 = l2.next (3) | dummy(0) -> 1 -> 1 -> null |
| 5 | Move current to current.next (1) | dummy(0) -> 1 -> 1 -> null | current = current.next (1) | dummy(0) -> 1 -> 1 -> null |
| 6 | Compare l1.val=2 and l2.val=3 | l1:2->4, l2:3->4 | current.next = l1, l1 = l1.next (4) | dummy(0) -> 1 -> 1 -> 2 -> null |
| 7 | Move current to current.next (2) | dummy(0) -> 1 -> 1 -> 2 -> null | current = current.next (2) | dummy(0) -> 1 -> 1 -> 2 -> null |
| 8 | Compare l1.val=4 and l2.val=3 | l1:4, l2:3->4 | current.next = l2, l2 = l2.next (4) | dummy(0) -> 1 -> 1 -> 2 -> 3 -> null |
| 9 | Move current to current.next (3) | dummy(0) -> 1 -> 1 -> 2 -> 3 -> null | current = current.next (3) | dummy(0) -> 1 -> 1 -> 2 -> 3 -> null |
| 10 | Compare l1.val=4 and l2.val=4 | l1:4, l2:4 | current.next = l1, l1 = l1.next (null) | dummy(0) -> 1 -> 1 -> 2 -> 3 -> 4 -> null |
| 11 | Move current to current.next (4) | dummy(0) -> 1 -> 1 -> 2 -> 3 -> 4 -> null | current = current.next (4) | dummy(0) -> 1 -> 1 -> 2 -> 3 -> 4 -> null |
| 12 | l1 is null, attach remaining l2 (4) | l2:4 | current.next = l2 | dummy(0) -> 1 -> 1 -> 2 -> 3 -> 4 -> 4 -> null |
| 13 | Return merged list starting at dummy.next | Merged list: 1 -> 1 -> 2 -> 3 -> 4 -> 4 -> null | No pointer changes | 1 -> 1 -> 2 -> 3 -> 4 -> 4 -> null |