Почему вы не можете создавать связанные списки, не создавая узлы в качестве указателей?
Вы можете, но вам определенно нужна какая-то косвенная косвенность.
Почему указатели, обычно используемые для реализации связанных списков? Как уже упоминалось в своем ответе @ 6502, вы можете добиться того же с помощью массивов или любого другого контейнера, который вы храните как страницу / память списка. Но ради аргумента давайте сравним List, реализованный указателями, и один из которых сохраняет узел как член. Основной ответ: легче реализовать функциональность списка. Преимущество списков состоит в том, что вы можете легко перемещать / выдвигать вперед и назад и очень быстро удалять элементы. Как осуществляется удаление в списке? Вы просто меняете указатель, который указывает на «подлежащий удалению объект», на следующий узел (или в случае массива вы назначаете другой индекс). Но если ваш «подлежащий удалению объект» содержит другой объект как реальный объект, а не через указатель, вам придется move
отложить его перед удалением, иначе он и остальная часть списка исчезнут.
Также вы можете реализовать только односвязный список, потому что только один узел может содержать другой. Если Node A
имеет NodeB
, то NodeB
также не может иметь NodeA
. Но с указателями NodeB
может без проблем указывать на NodeA
и наоборот.
TL; DR Если вы используете указатели или массивы, ваши действия со списком, такие как удаление, нажатие и т. Д., Просто переключают указатели или индексы. Если ваши узлы содержат данные, вы должны обновить их путем перемещения / копирования. И это громоздко для реализации и намного сложнее, чем перенаправление указатель / ссылка.