| 1 | Create dummy node pointing to head | dummy | dummy | 0 -> 1 -> 2 -> 3 -> 4 -> 5 -> null | dummy.next = head | dummy(0) -> 1 -> 2 -> 3 -> 4 -> 5 -> null |
| 2 | Initialize first and second at dummy | dummy | dummy | 0 -> 1 -> 2 -> 3 -> 4 -> 5 -> null | first = dummy, second = dummy | dummy(0) -> 1 -> 2 -> 3 -> 4 -> 5 -> null |
| 3 | Move first pointer 1 step (i=0) | 1 | dummy | 0 -> 1 -> 2 -> 3 -> 4 -> 5 -> null | first = first->next | dummy(0) -> 1 -> 2 -> 3 -> 4 -> 5 -> null |
| 4 | Move first pointer 2 steps (i=1) | 2 | dummy | 0 -> 1 -> 2 -> 3 -> 4 -> 5 -> null | first = first->next | dummy(0) -> 1 -> 2 -> 3 -> 4 -> 5 -> null |
| 5 | Move first pointer 3 steps (i=2) | 3 | dummy | 0 -> 1 -> 2 -> 3 -> 4 -> 5 -> null | first = first->next | dummy(0) -> 1 -> 2 -> 3 -> 4 -> 5 -> null |
| 6 | Move first pointer 4 steps (i=3) | 4 | dummy | 0 -> 1 -> 2 -> 3 -> 4 -> 5 -> null | first = first->next | dummy(0) -> 1 -> 2 -> 3 -> 4 -> 5 -> null |
| 7 | Move first pointer 5 steps (i=4) | 5 | dummy | 0 -> 1 -> 2 -> 3 -> 4 -> 5 -> null | first = first->next | dummy(0) -> 1 -> 2 -> 3 -> 4 -> 5 -> null |
| 8 | Move first pointer 6 steps (i=5) | null | dummy | 0 -> 1 -> 2 -> 3 -> 4 -> 5 -> null | first = first->next | dummy(0) -> 1 -> 2 -> 3 -> 4 -> 5 -> null |
| 9 | First is null, start moving both pointers | null | dummy | 0 -> 1 -> 2 -> 3 -> 4 -> 5 -> null | No move, first is null | dummy(0) -> 1 -> 2 -> 3 -> 4 -> 5 -> null |
| 10 | Since first is null, stop moving pointers | null | dummy | 0 -> 1 -> 2 -> 3 -> 4 -> 5 -> null | Stop loop | dummy(0) -> 1 -> 2 -> 3 -> 4 -> 5 -> null |
| 11 | Remove node after second (which is head) | null | dummy | 0 -> 1 -> 2 -> 3 -> 4 -> 5 -> null | second->next = second->next->next | dummy(0) -> 2 -> 3 -> 4 -> 5 -> null |
| 12 | Return dummy.next as new head | null | dummy | 2 -> 3 -> 4 -> 5 -> null | Return dummy.next | 2 -> 3 -> 4 -> 5 -> null |