Menu
CoddyTech
flag Ar iconالعربيةdown icon

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]