Menu
CoddyTech

Middle of the Linked List

נתונה לך רשימה מקושרת חד־כיוונית המאוחסנת בשני מערכים באותו אורך. צומת i מכיל את הערך values[i] ומקושר לצומת next[i], הערך -1 מסיים את הרשימה, וראש הרשימה הוא צומת 0. הצמתים אינם מאוחסנים לפי סדר הרשימה, לכן יש לעקוב אחר הקישורים.

החזר את הערך של הצומת האמצעי. כאשר יש ברשימה מספר זוגי של צמתים, יש שני צמתים אמצעיים; החזר את הערך של השני מביניהם.

פונקציה

middleNode(values: integer-array, next: integer-array) → integer
valuesinteger-array
הערך שמכילה כל צומת
nextinteger-array
האינדקס של הצומת שאליו כל צומת מקושר, או ‎-1‎ עבור הצומת האחרון
מחזירהinteger
הערך של הצומת האמצעי, הצומת האמצעי השני כאשר האורך זוגי

אילוצים

  • 1 ≤ n ≤ 5000, כאשר n הוא האורך של values ושל next.
  • -104 ≤ values[i] ≤ 104
  • כל next[i] הוא -1 או אינדקס של צומת מ־0 עד n-1.
  • החל מהצומת 0, הרשימה מבקרת בכל צומת בדיוק פעם אחת ואז מגיעה ל־-1. אין מעגל.

דוגמאות

קלט
values = [4, 9, 2, 7, 5]next = [3, -1, 1, 4, 2]
פלט
5
הסבר
מעקב אחר הקישורים מהצומת 0 נותן את הצמתים 0, 3, 4, 2, 1, ולכן הרשימה היא 4, 7, 5, 2, 9. השלישי מתוך החמישה הוא הצומת 4, שערכו הוא 5. האיבר האמצעי של המערך עצמו, values[2] = 2, הוא צומת אחר.

lock icon+13 בדיקות נסתרות בשליחה

challenge icon

שאלת המשך

האם תוכל להחזיר את הצומת שנמצא בשליש הדרך לאורך הרשימה במעבר יחיד? באיזו מהירות ינוע כל מצביע, והיכן תעצור?

איפוס הקוד
def middleNode(values, next):
    # כתבו כאן קוד
מקרי בדיקה

מקרה 1

מקרה 2

מקרה 3

קלט

values = [4, 9, 2, 7, 5]
next = [3, -1, 1, 4, 2]

צפוי

5