Реализация списка ссылок. Хакер Ранг Видео - PullRequest
0 голосов
/ 13 февраля 2020

Я изучаю DS и наткнулся на короткий видеоурок Hacker Rank в Связанном списке.

Это довольно очевидно, но я не могу понять один момент, когда она сказала " Если мы предварительно добавим, у нас будет небольшая проблема". Здесь она в основном говорит, что перемещает код добавления в другой класс . Я пытаюсь понять и визуализировать, что на самом деле она имела в виду и что может быть потенциальной проблемой, если мы оставим это в самом классе Node. Она упомянула, но я не могу понять эту концепцию.

Вот ссылка: https://www.youtube.com/watch?v=njTh_OwMljA&t=186s Время: 3: 01 .

Может ли кто-нибудь еще это уточнить?

1 Ответ

0 голосов
/ 14 февраля 2020

Особая проблема возникает, когда вы пытаетесь предварительно добавить (добавить значения в начале).

Создается несколько объектов класса узла. Скажем, ваш список выглядит следующим образом: 1->2->3->4->5, где каждый номер - один узел.

Теперь вы хотите выполнить обычное добавление (в конце), вы звоните 3.append(). current указывает на 3, вы перебираете до последнего узла и добавляете его. Здесь нет проблем.

Теперь, когда вы пытаетесь предварительно добавить его, вы в идеале меняете заголовок каждого узла, присутствующего в списке.

Скажем, вы хотите предварительно добавить 0 , Ваш список должен выглядеть как 0->1->2->3->4->5. 0 - фактическая глава связанного списка.

Если вы позвоните таким же образом 3.pre_append(), вы получите что-то вроде

1->2->3 X 0->3->4->5, где вы бы изменили заголовок узла, из которого вы вызвали функцию, а не заголовок всего связанного списка, который вы намеревались сделать.

Таким образом, только заголовок этого узла будет изменен, и все остальные узлы не будут знать, кто этот заголовок или, что еще хуже, может быть несколько головок в зависимости от того, кто вызывает pre_append.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...