Menu
CoddyTech

Linked List Cycle

Связный список хранится в массиве next: узел i ссылается на узел next[i], а -1 означает, что список здесь заканчивается. Голова списка — узел 0. Следуй по ссылкам от головы и верни true, если вернёшься к узлу, который уже посещал, или false, если дойдёшь до конца. Узлы, до которых обход никогда не доходит, не учитываются, даже если они ссылаются друг на друга, образуя цикл.

Функция

hasCycle(next: integer-array) → boolean
nextinteger-array
ссылка каждого узла: next[i] — это узел после узла i или -1
Возвращаетboolean
true, если обход от узла 0 повторно посещает узел, false, если достигает -1

Ограничения

  • 1 ≤ next.length ≤ 104
  • -1 ≤ next[i] ≤ next.length-1
  • Несколько узлов могут ссылаться на один и тот же узел, а некоторые узлы могут быть недостижимы из головного узла.

Примеры

Ввод
next = [1, 2, 3, 1]
Вывод
true
Пояснение
Обход идет по узлам 0, 1, 2, 3, а затем возвращается к 1. Узел 1 посещается дважды, поэтому в списке есть цикл через узлы 1, 2 и 3.

lock icon+16 скрытых тестов при отправке

challenge icon

Дополнительный вопрос

Можешь также найти узел, с которого начинается цикл, используя по-прежнему дополнительную память O(1)?

Сбросить код
def hasCycle(next):
    # Напишите код здесь
Тестовые случаи

Случай 1

Случай 2

Случай 3

Ввод

next = [1, 2, 3, 1]

Ожидается

true