Menu
CoddyTech

Remove Nth Node From End of List

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

הסר את הצומת ה־n בספירה מסוף הרשימה, כאשר הצומת האחרון הוא הראשון מסוף הרשימה. החזר את הערכים של הצמתים שנותרו, לפי סדר הרשימה.

פונקציה

removeNthFromEnd(values: integer-array, next: integer-array, n: integer) → integer-array
valuesinteger-array
הערך שמוחזק בכל צומת
nextinteger-array
האינדקס של הצומת שאליו כל צומת מקושר, או -1 עבור הצומת האחרון
ninteger
איזה צומת להסיר, בספירה מסוף הרשימה, כאשר 1 הוא הצומת האחרון
מחזירהinteger-array
הערכים הנותרים לפי הסדר ברשימה, ריק כאשר מסירים את הצומת היחיד

אילוצים

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

דוגמאות

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

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

challenge icon

שאלת המשך

האם תוכל למצוא את הצומת ולנתק אותו במעבר אחד, בלי לספור תחילה את האורך?

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

מקרה 1

מקרה 2

מקרה 3

קלט

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

צפוי

[5, 2, 6, 7]