Какова временная сложность вставки элемента в LinkedList в Java?

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

Ответ

Временная сложность зависит от позиции вставки:

  • O(1) для вставки в начало (addFirst()) или конец (addLast()) списка. Операция сводится к обновлению ссылок у головного (head) или хвостового (tail) узла.
  • O(n) для вставки в произвольную позицию по индексу (add(int index, E element)). Требуется линейный обход для нахождения узла-предшественника.

Пример:

LinkedList<String> list = new LinkedList<>();
list.add("A");        // O(1) - вставка в конец
list.addFirst("B");   // O(1) - вставка в начало
list.add(1, "C");     // O(n) - вставка в середину (требуется обход до индекса 1)

Почему? LinkedList реализован как двусвязный список. Прямой доступ по индексу отсутствует, поэтому нахождение нужной позиции для вставки "в середину" требует последовательного прохода от начала списка.