Особая проблема возникает, когда вы пытаетесь предварительно добавить (добавить значения в начале).
Создается несколько объектов класса узла. Скажем, ваш список выглядит следующим образом: 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 был перенесен в другой класс, где только один узел может называться головкой. .