Menu
CoddyTech

Linked List Cycle

Danh sách liên kết được lưu trong mảng next: nút i liên kết đến nút next[i], còn -1 nghĩa là danh sách kết thúc tại đó. Nút đầu là nút 0. Đi theo các liên kết từ nút đầu và trả về true nếu bạn quay lại một nút đã đi qua, hoặc false nếu bạn đến cuối danh sách. Những nút mà bạn không đi đến không được tính, ngay cả khi chúng liên kết với nhau thành một vòng lặp.

Hàm

hasCycle(next: integer-array) → boolean
nextinteger-array
liên kết của mỗi nút: next[i] là nút đứng sau nút i hoặc -1
Trả vềboolean
true nếu đường đi từ nút 0 ghé lại một nút đã đi qua, false nếu đến -1

Ràng buộc

  • 1 ≤ next.length ≤ 104
  • -1 ≤ next[i] ≤ next.length-1
  • Nhiều nút có thể liên kết đến cùng một nút, và một số nút có thể không thể truy cập được từ nút đầu.

Ví dụ

Đầu vào
next = [1, 2, 3, 1]
Đầu ra
true
Giải thích
Lộ trình đi qua 0, 1, 2, 3 rồi quay lại 1. Nút 1 được ghé thăm hai lần, nên danh sách có một chu trình đi qua các nút 1, 2 và 3.
challenge icon

Câu hỏi mở rộng

Bạn cũng có thể tìm nút nơi chu trình bắt đầu mà vẫn chỉ dùng thêm bộ nhớ O(1) không?

Đặt lại code
def hasCycle(next):
    # Viết code ở đây

Kiểm thử #1

Kiểm thử #2

Kiểm thử #3

Đối số

next = [1, 2, 3, 1]

Đầu ra mong đợi

true