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
노드 0에서 시작한 이동이 노드를 다시 방문하면 true, -1에 도달하면 false

제약 조건

  • 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