Menu
CoddyTech

Linked List Cycle

Uma lista encadeada é armazenada no array next: o nó i aponta para o nó next[i], e -1 significa que a lista termina ali. A cabeça é o nó 0. Siga os links a partir da cabeça e retorne true se voltar a um nó que já visitou, ou false se chegar ao fim. Nós que o percurso nunca alcança não contam, mesmo que apontem uns para os outros em um ciclo.

Função

hasCycle(next: integer-array) → boolean
nextinteger-array
o link de cada nó: next[i] é o nó após o nó i, ou -1
Retornaboolean
true se o percurso a partir do nó 0 revisitar um nó, false se chegar a -1

Restrições

  • 1 ≤ next.length ≤ 104
  • -1 ≤ next[i] ≤ next.length-1
  • Vários nós podem apontar para o mesmo nó, e alguns nós podem ser inacessíveis a partir da cabeça.

Exemplos

Entrada
next = [1, 2, 3, 1]
Saída
true
Explicação
O percurso vai de 0 a 1, 2, 3 e depois volta a 1. O nó 1 é visitado duas vezes, então a lista tem um ciclo que passa pelos nós 1, 2 e 3.

lock icon+16 testes ocultos ao enviar

challenge icon

Para ir além

Você também consegue encontrar o nó onde o ciclo começa, ainda usando memória extra O(1)?

Redefinir código
def hasCycle(next):
    # Escreva o código aqui
Casos de teste

Caso 1

Caso 2

Caso 3

Entrada

next = [1, 2, 3, 1]

Esperado

true