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

Ответ

Связный список (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 слайсы динамические, но расширение может вызвать переаллокацию всего массива.
Доп. память Требует дополнительную память для хранения указателей. Не требует доп. памяти на указатели между элементами.

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