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
صحيح إذا كانت القائمة تُقرأ بالطريقة نفسها في كلا الاتجاهين

القيود

  • 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