Menu
CoddyTech

Palindrome Linked List

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

החזר true אם הערכים שנקראים מהראש ועד הסוף זהים לערכים שנקראים מהסוף בחזרה לראש, ו-false אחרת.

פונקציה

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

אילוצים

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

דוגמאות

קלט
next = [4, 3, -1, 2, 1]values = [3, 4, 3, 1, 1]
פלט
true
הסבר
הקישורים מבקרים בצמתים 0, 4, 1, 3, 2, ולכן הרשימה היא 3, 1, 4, 1, 3. שני ה־3 תואמים, שני ה־1 תואמים, ול־4 שבאמצע אין בן זוג להשוואה.
challenge icon

שאלת המשך

האם אפשר לעשות זאת בזמן O(L) ובשימוש בזיכרון נוסף של O(1)?

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

בדיקה #1

בדיקה #2

בדיקה #3

ארגומנטים

next = [4, 3, -1, 2, 1]
values = [3, 4, 3, 1, 1]

הפלט הצפוי

true