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