#javascript #loops #linked-list #singly-linked-list #let
Вопрос:
Учитывая заголовок отсортированного связанного списка, удалите все дубликаты, чтобы каждый элемент появлялся только один раз. Верните также отсортированный связанный список.
Вход: головка = [1,1,2] Выход: [1,2]
Решение:
let curr=head; while(curr amp;amp; curr.next){ if(curr.val===curr.next.val){ curr.next=curr.next.next; } else{ curr=curr.next; } } return head;
Я пытаюсь решить этот вопрос с помощью leetcode и нашел одно решение, которое я не могу понять, почему мы принимаем head
let curr
это ? И если я пытаюсь сделать то же самое, не принимая head
другую переменную, то я получаю только [2]
результат.
Ответ №1:
Почему мы принимаем
head
участиеlet curr
?
По двум причинам:
curr
необходимо что-то инициализировать, иначе оно будет иметь неопределенное значение, что сделаетwhile
условие всегда ложным, поэтому не будет никаких итераций и никаких удалений.curr
предназначен для ссылки на каждый (не дублирующийся) узел один за другим, поэтому имеет смысл начать с первого узла, который естьhead
.
И, если я пытаюсь сделать то же самое, не принимая
head
другую переменную, то я получаю только [2] в качестве вывода.
Это может произойти только тогда, когда вы также измените значение return head
return curr
. Если вы это сделаете, то вы всегда будете возвращать список, содержащий не более одного узла, потому что после завершения цикла curr
будет ссылаться на последний узел в списке (если он не пустой).
Чтобы вернуть все узлы в списке, вам нужно всегда возвращать его первый узел, и это то, что head
представляет.
Комментарии:
1. О, я понял. Большое вам спасибо за вашу помощь.