Что такое связный список, его структура и отличия от массива/слайса?

Ответ

Связный список (Linked List) — это базовая динамическая структура данных, состоящая из последовательности узлов (nodes).

Каждый узел содержит две части:

  1. Данные (Data): Полезная информация, которую хранит узел.
  2. Указатель (Next): Ссылка на следующий узел в последовательности. У последнего узла указатель равен nil.

В двусвязном списке узел также содержит указатель на предыдущий узел (Prev).

Структура узла в Go:

// Узел для односвязного списка
type Node struct {
    data int
    next *Node
}

Ключевые характеристики и отличия от массива/слайса:

ХарактеристикаСвязный списокМассив / Слайс
Хранение в памятиЭлементы хранятся вразброс, связаны указателями.Элементы хранятся в непрерывном блоке памяти.
Доступ к элементуПоследовательный, O(n). Нужно пройти все узлы от начала.Прямой по индексу, O(1).
Вставка/УдалениеЭффективно в начале/конце (O(1)), если есть указатели на голову/хвост.Неэффективно в начале/середине (O(n)), требует сдвига элементов.
РазмерДинамический, легко изменяется во время выполнения.В Go слайсы динамические, но расширение может вызвать переаллокацию всего массива.
Доп. памятьТребует дополнительную память для хранения указателей.Не требует доп. памяти на указатели между элементами.

Вывод: Связные списки идеально подходят для задач, где часто выполняются операции вставки/удаления элементов, а доступ по индексу не требуется (например, реализации стека или очереди).