Связанные списки — это фундаментальные структуры данных в информатике, обеспечивающие эффективное распределение памяти и динамическую организацию данных. В циклическом связанном списке указатель «следующий» последнего узла указывает обратно на первый узел, создавая зацикленную структуру. В этой статье рассматриваются различные методы работы с циклическими связными списками и приводятся примеры кода для иллюстрации каждой операции.
Метод 1: обход циклического связанного списка
Чтобы пройти циклический связанный список, мы начинаем с первого узла и продолжаем, пока снова не достигнем первого узла. Вот пример фрагмента кода на Python:
class Node:
def __init__(self, data):
self.data = data
self.next = None
class CircularLinkedList:
def __init__(self):
self.head = None
def traverse(self):
if self.head is None:
return
current = self.head
while True:
print(current.data)
current = current.next
if current == self.head:
break
Метод 2: вставка узла в начало
Чтобы вставить новый узел в начало циклического связанного списка, нам необходимо правильно обновить указатели «следующий». Вот пример фрагмента кода на Python:
class CircularLinkedList:
# ...
def insert_at_beginning(self, data):
new_node = Node(data)
if self.head is None:
self.head = new_node
new_node.next = self.head
else:
current = self.head
while current.next != self.head:
current = current.next
current.next = new_node
new_node.next = self.head
self.head = new_node
Метод 3: удаление узла
Для удаления узла в циклическом связанном списке необходимо соответствующим образом обновить указатели «следующий». Вот пример фрагмента кода на Python:
class CircularLinkedList:
# ...
def delete(self, key):
if self.head is None:
return
current = self.head
prev = None
while True:
if current.data == key:
if current.next == self.head:
break
if current == self.head:
while current.next != self.head:
current = current.next
current.next = self.head.next
self.head = self.head.next
else:
prev.next = current.next
break
prev = current
current = current.next
if current == self.head:
break
Циркулярные связанные списки открывают уникальные возможности и возможности для эффективного манипулирования данными. В этой статье мы рассмотрели три основных метода операций с циклическими связными списками: обход списка, вставка узла в начало и удаление узла. Понимание этих операций позволит вам эффективно работать с циклическими связными списками, открывая двери для инновационных решений в различных сценариях программирования.