Menu
CoddyTech

Reverse Nodes in k-Group

تُخزَّن قائمة مترابطة أحادية في مصفوفتين بالطول نفسه. تحتوي العقدة i على values[i] وترتبط بالعقدة next[i]؛ وتشير -1 إلى نهاية القائمة، والعقدة 0 هي الرأس. قد تُخزَّن العقد بأي ترتيب، لذا اتبع الروابط، لا ترتيب المصفوفة.

اعكس القائمة ضمن مجموعات من k عقد: تُعكس أول k عقد، ثم تُعكس المجموعة التالية المكوّنة من k عقد، وهكذا. تحتفظ المجموعة الأخيرة التي تضم أقل من k عقد بترتيبها. أعد القيم بترتيب القائمة الجديد.

الدالة

reverseKGroup(next: integer-array, values: integer-array, k: integer) → integer-array
nextinteger-array
فهرس العقدة التي ترتبط بها كل عقدة، أو ‎-1‎ للعقدة الأخيرة
valuesinteger-array
القيمة التي تحتفظ بها كل عقدة
kinteger
عدد العُقد في كل مجموعة لعكسها
تُرجعinteger-array
القيم بترتيب القائمة الجديدة

القيود

  • 1 ≤ L ≤ 5000، حيث L هو طول next وvalues.
  • -1000 ≤ values[i] ≤ 1000
  • 1 ≤ k ≤ L
  • كل قيمة next[i] هي -1 أو فهرس عقدة من 0 إلى L-1.
  • بدءًا من العقدة 0، تزور القائمة كل عقدة مرة واحدة بالضبط، ثم تصل إلى -1. لا توجد دورة.

أمثلة

المدخلات
next = [2, 3, 4, -1, 1]values = [1, 4, 2, 5, 3]k = 2
المخرجات
[2, 1, 4, 3, 5]
الشرح
تُقرأ القائمة كالتالي: 1, 2, 3, 4, 5 (العُقد 0, 2, 4, 1, 3). الزوجان 1, 2 و3, 4 معكوسان، أما 5 وحده فأقصر من k = 2، لذا يبقى في النهاية.
challenge icon

سؤال إضافي

هل يمكنك كتابتها بصورة递递ية، بعكس مجموعة واحدة والاستدعاء递递ي على بقية القائمة؟ ما مقدار الذاكرة الإضافية التي تستخدمها؟

إعادة ضبط الشيفرة
def reverseKGroup(next, values, k):
    # اكتب الشيفرة هنا

اختبار #1

اختبار #2

اختبار #3

الوسائط

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

الإخراج المتوقع

[2, 1, 4, 3, 5]