Що таке циклічний список (circular linked list)?
Циклічний список (circular linked list) - це різновид зв'язаного списку, у якому останній вузол не вказує на None, а посилається назад на перший вузол (head), утворюючи замкнуте коло.
Тобто під час обходу списку можна рухатися нескінченно по колу - після останнього елемента знову йде перший.
1. Візуально
Однозв'язний циклічний список:
javascript
head → [10 | *] → [20 | *] → [30 | *] ──┐
↑──────────────────────────────┘- У останнього вузла
nextвказує наhead. - Немає "кінця списку" - обхід можна почати з будь-якого вузла і завжди повернутися назад.
2. Двозв'язний циклічний список
У ньому кожен вузол має і prev, і next,
і обидва вказівники замикаються по колу:
javascript
↰ [10] ↔ [20] ↔ [30] ↺head.prev = tailtail.next = head
3. Як зберігається
Кожен вузол має посилання, як у звичайному списку, але:
- при створенні останнього елемента його
nextвказує наhead, - (у двозв'язному варіанті ще й
head.prevвказує наtail).
4. Основні операції
| Операція | Складність | Опис |
|---|---|---|
| Обхід | O(n) | Можна обійти, починаючи з будь-якого вузла, але потрібно стежити, щоб не зациклитися. |
| Вставка/видалення за відомого вузла | O(1) | Просто переназначаються посилання. |
| Пошук | O(n) | Як і у звичайному списку. |
5. Переваги
- Можна обходити список по колу без перевірки "кінця".
- Зручний для циклічних структур: черг, буферів, ігрових циклів, кругового розподілу завдань ("round-robin").
- Немає "мертвого кінця" (
None), кожен вузол пов'язаний з іншими.
6. Недоліки
- Потрібно обережно працювати з циклами, інакше програма може застрягти в нескінченному обході.
- Складніше контролювати початок і кінець.
7. Приклад на Python
python
class Node:
def __init__(self, data):
self.data = data
self.next = None
# створення циклічного списку: 10 → 20 → 30 → назад на 10
n1 = Node(10)
n2 = Node(20)
n3 = Node(30)
n1.next = n2
n2.next = n3
n3.next = n1 # цикл
head = n1Підсумок:
Циклічний список - це зв'язаний список, у якому останній елемент посилається назад на перший. Така структура утворює кільце, зручне для реалізації циклічних черг, буферів і процесів, що повторюються.
Коротка відповідь
Для співбесідиPremium
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.