Menu
CoddyTech

Linked List Cycle

Lista jednokierunkowa jest przechowywana w tablicy next: węzeł i prowadzi do węzła next[i], a -1 oznacza koniec listy. Głową jest węzeł 0. Podążaj za połączeniami od głowy i zwróć true, jeśli wrócisz do węzła, który został już odwiedzony, lub false, jeśli dotrzesz do końca. Węzły, do których nigdy nie dotrzesz, nie mają znaczenia, nawet jeśli łączą się ze sobą w pętlę.

Funkcja

hasCycle(next: integer-array) → boolean
nextinteger-array
następnik każdego węzła: next[i] to węzeł znajdujący się po węźle i albo -1
Zwracaboolean
true, jeśli przejście od węzła 0 ponownie odwiedza węzeł, false, jeśli dociera do -1

Ograniczenia

  • 1 ≤ next.length ≤ 104
  • -1 ≤ next[i] ≤ next.length-1
  • Kilka węzłów może prowadzić do tego samego węzła, a niektóre węzły mogą być nieosiągalne z głowy.

Przykłady

Wejście
next = [1, 2, 3, 1]
Wyjście
true
Wyjaśnienie
Przejście przebiega przez 0, 1, 2, 3, a następnie wraca do 1. Węzeł 1 jest odwiedzany dwukrotnie, więc lista zawiera cykl przechodzący przez węzły 1, 2 i 3.

lock icon+16 ukrytych testów przy wysłaniu

challenge icon

Pytanie dodatkowe

Czy potrafisz również znaleźć węzeł, w którym zaczyna się cykl, nadal używając dodatkowej pamięci O(1)?

Zresetuj kod
def hasCycle(next):
    # Wpisz kod tutaj
Przypadki testowe

Przypadek 1

Przypadek 2

Przypadek 3

Wejście

next = [1, 2, 3, 1]

Oczekiwane

true