Как можно реализовать поиск цикла в однонаправленном списке? Как с помощью функции реализовать поиск цикла в однонаправленном списке?
Еще лучше было бы,если это было подстроено под класс.
class Node(object):
def __init__(self, value, next_node=None):
self.next_node = next_node
self.value = value
def is_circular():

21 Авг 2019 в 06:32
250 +1
0
Ответы
1

Для реализации поиска цикла в однонаправленном списке можно использовать алгоритм Флойда (алгоритм замечания черепахи и зайца). Этот алгоритм базируется на двух указателях, один из которых движется быстрее другого. Если в списке есть цикл, то быстрый указатель рано или поздно догонит медленный указатель.

Ниже приведен пример реализации этого алгоритма с использованием класса Node:

class Node(object):
def __init__(self, value, next_node=None):
self.next_node = next_node
self.value = value
def is_circular(head):
slow = head
fast = head
while fast is not None and fast.next_node is not None:
slow = slow.next_node
fast = fast.next_node.next_node
if slow == fast:
return True
return False
# Пример использования
a = Node('A')
b = Node('B')
c = Node('C')
d = Node('D')
a.next_node = b
b.next_node = c
c.next_node = d
d.next_node = b # создаем цикл
print(is_circular(a)) # Выведет True, так как в списке есть цикл

Функция is_circular принимает голову списка (head) в качестве аргумента и проверяет, есть ли в списке цикл. Она возвращает True, если цикл найден, и False в противном случае.

20 Апр в 13:17
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 436 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир