Работайте с более простым примером, и вы поймете. Рассмотрим список с двумя узлами.
1 -> 1*
^
Head
(*
означает визуальное различие)
Вы создаете новый фиктивный узел и указываете его рядом с заголовком
0 -> 1 -> 1*
^ ^
dummy Head
Затем вы начинаете итерацию с пустышки (выполняя n = dummy
)
0 -> 1 -> 1*
^ ^
n,dummy Head
Вы вводите l oop и вводите условие if. Тот факт, что вы меняете n
next
, также меняет dummy
* next
.
0 -> 1* <- 1
^ ^
n,dummy Head
Таким образом, вы продолжаете двигаться dummy
* next
до тех пор, пока последовательные значения одинаковы. Как только вы встретите другое значение, вы идете вперед n
и оставляете dummy.next
, указывая на голову.