Какие плюсы и минусы у связанных списков?

«Какие плюсы и минусы у связанных списков?» — вопрос из категории Алгоритмы и структуры данных, который задают на 26% собеседований Node.js Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Плюсы:

  • Динамический размер: Элементы можно добавлять и удалять без необходимости перераспределения памяти, в отличие от массивов.
  • Эффективная вставка/удаление: Вставка или удаление узла в начале/конце (или при известном указателе) выполняется за O(1).
  • Не требует непрерывной памяти: Узлы могут располагаться в разных участках памяти, что упрощает управление памятью в некоторых сценариях.

Минусы:

  • Отсутствие произвольного доступа: Для доступа к элементу по индексу требуется последовательный обход (O(n)).
  • Дополнительные затраты памяти: Каждый узел хранит помимо данных указатель (или два для двусвязного списка).
  • Низкая локальность данных: Разрозненное хранение узлов приводит к частым кэш-промахам процессора, что снижает производительность по сравнению с массивами.
// Пример реализации узла односвязного списка в JavaScript/Node.js
class ListNode {
  constructor(value) {
    this.value = value;
    this.next = null; // Указатель на следующий узел
  }
}

// Пример использования
const head = new ListNode(1);
head.next = new ListNode(2);
head.next.next = new ListNode(3);
// Список: 1 -> 2 -> 3 -> null