Menu
CoddyTech

Intersection of Two Linked Lists

שתי רשימות מקושרות חד־כיווניות נמצאות באותו מאגר צמתים. צומת i מצביע לצומת next[i], ו--1 מסיים רשימה. רשימה A מתחילה בצומת headA ורשימה B בצומת headB. הצמתים מאוחסנים ללא סדר מסוים, ולכן יש לעקוב אחר הקישורים.

ייתכן ששתי הרשימות יתמזגו: החל מצומת מסוים, הן ממשיכות דרך אותם צמתים עד הסוף. יש להחזיר את האינדקס של הצומת הראשון שנמצא בשתי הרשימות, או -1 אם אין להן צומת משותף.

פונקציה

getIntersectionNode(next: integer-array, headA: integer, headB: integer) → integer
nextinteger-array
האינדקס של הצומת שאליו כל צומת מקשר, או ‎-1 עבור הצומת האחרון ברשימה
headAinteger
הצומת הראשון ברשימה A
headBinteger
הצומת הראשון ברשימה B
מחזירהinteger
הצומת הראשון המשותף לשתי הרשימות, או ‎-1

אילוצים

  • 2 ≤ n ≤ 104, כאשר n הוא האורך של next.
  • כל next[i] הוא -1 או אינדקס של צומת מ־0 עד n-1.
  • 0 ≤ headA, headB ≤ n-1 וגם headA ≠ headB.
  • שתי הרשימות מסתיימות ב־-1 בלי לבקר בצומת פעמיים. אין מעגל.
  • כל צומת נמצא ברשימה A, ברשימה B או בשתיהן.

דוגמאות

קלט
next = [-1, 4, 1, 5, 0, 1]headA = 3headB = 2
פלט
1
הסבר
‏A מבקר ב־3, 5, 1, 4, 0 ו־B מבקר ב־2, 1, 4, 0. החל מצומת 1 הם חולקים כל צומת, ואף צומת מוקדם יותר של A אינו נמצא ב־B, לכן התשובה היא 1.
challenge icon

שאלת המשך

האם תוכל למצוא את הצומת בזמן O(m + k) ובזיכרון נוסף של O(1)?

איפוס הקוד
def getIntersectionNode(next, headA, headB):
    # כתבו כאן את הקוד

בדיקה #1

בדיקה #2

בדיקה #3

ארגומנטים

next = [-1, 4, 1, 5, 0, 1]
headA = 3
headB = 2

הפלט הצפוי

1