Яка складність видалення із середини списку?
Складність видалення із середини зв'язаного списку - O(n) (лінійна).
Чому так
Щоб видалити елемент із середини, потрібно:
- Знайти цей елемент - а отже, пройти список від
headдо потрібного вузла (це вже O(n)). - Переназначити посилання:
- попередній вузол тепер має вказувати на наступний після видаленого,
- а видаленому вузлу "випадає" з ланцюжка.
Ця друга операція - O(1), але пошук позиції - O(n), і саме він визначає загальну складність.
Приклад
javascript
head → [10] → [20] → [30] → [40]
↑ видалити цей- Пройти до
[20]- займає час, пропорційний кількості вузлів. - Змінити посилання попереднього:
[10].next = [30]. - Вузол
[20]видалено.
Якщо вказівник на вузол, що видаляється, уже є
Якщо програма вже має пряме посилання на потрібний вузол (а не індекс), то видалення виконується за O(1) - просто переназначаються посилання.
Формально
| Сценарій | Складність |
|---|---|
| Видалення за індексом (потрібно знайти вузол) | O(n) |
| Видалення за прямим посиланням на вузол | O(1) |
Порівняння з масивом
| Структура | Видалення із середини |
|---|---|
| Масив | O(n) - зсув усіх елементів |
| Зв'язаний список | O(n) - пошук вузла (або O(1), якщо вже знайдено) |
Підсумок:
Видалення із середини зв'язаного списку займає O(n), тому що потрібно пройти до потрібного вузла, перш ніж змінити посилання.
Коротка відповідь
Для співбесідиPremium
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.