Ответ
Вставка элемента в середину LinkedList — это операция O(n), где n — количество элементов в списке.
Процесс вставки по индексу add(index, element):
- Поиск позиции (O(n)): Происходит обход списка с головы или хвоста (в зависимости от того, какая половина ближе) для нахождения узла по заданному индексу.
- Вставка (O(1)): После нахождения узла-предшественника создаётся новый узел, и перенаправляются 4 ссылки:
newNode.prev = predecessornewNode.next = successorpredecessor.next = newNodesuccessor.prev = newNode
Пример кода:
LinkedList<String> list = new LinkedList<>(Arrays.asList("A", "C"));
// Вставка "B" по индексу 1 (между "A" и "C")
list.add(1, "B");
System.out.println(list); // [A, B, C]
| Сравнение с ArrayList: | Операция | LinkedList | ArrayList |
|---|---|---|---|
| Вставка в середину | O(n) (поиск) + O(1) (вставка) | O(n) (сдвиг элементов) | |
| Получение по индексу | O(n) | O(1) |
Вывод: LinkedList эффективен для частых вставок/удалений в уже известной позиции (например, при работе с итератором ListIterator.add()), но не для случайного доступа по индексу.