Удаление дубликатов из отсортированного списка в Javascript

#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 ?

По двум причинам:

  1. curr необходимо что-то инициализировать, иначе оно будет иметь неопределенное значение, что сделает while условие всегда ложным, поэтому не будет никаких итераций и никаких удалений.
  2. curr предназначен для ссылки на каждый (не дублирующийся) узел один за другим, поэтому имеет смысл начать с первого узла, который есть head .

И, если я пытаюсь сделать то же самое, не принимая head другую переменную, то я получаю только [2] в качестве вывода.

Это может произойти только тогда, когда вы также измените значение return head return curr . Если вы это сделаете, то вы всегда будете возвращать список, содержащий не более одного узла, потому что после завершения цикла curr будет ссылаться на последний узел в списке (если он не пустой).

Чтобы вернуть все узлы в списке, вам нужно всегда возвращать его первый узел, и это то, что head представляет.

Комментарии:

1. О, я понял. Большое вам спасибо за вашу помощь.