Menu
CoddyTech

Reverse Nodes in k-Group

Tek yönlü bağlı liste, aynı uzunluktaki iki dizide saklanır. i düğümü values[i] değerini taşır ve next[i] düğümüne bağlanır; -1 listenin sonunu belirtir ve baş düğüm 0'dır. Düğümler herhangi bir sırada saklanabilir; bu yüzden dizi sırasını değil, bağlantıları takip et.

Listeyi k düğümlük gruplar hâlinde tersine çevir: ilk k düğüm ters sırada gelir, ardından sonraki k düğüm gelir ve bu şekilde devam eder. k düğümden az düğüm içeren son grup sırasını korur. Değerleri yeni liste sırasına göre döndür.

Fonksiyon

reverseKGroup(next: integer-array, values: integer-array, k: integer) → integer-array
nextinteger-array
her düğümün bağlantı verdiği düğümün indeksi veya son düğüm için -1
valuesinteger-array
her düğümün tuttuğu değer
kinteger
tersine çevrilecek her gruptaki düğüm sayısı
Döndürürinteger-array
yeni listedeki sıraya göre değerler

Kısıtlar

  • 1 ≤ L ≤ 5000; burada L, next ve values uzunluğudur.
  • -1000 ≤ values[i] ≤ 1000
  • 1 ≤ k ≤ L
  • Her next[i], -1 ya da 0 ile L-1 arasında bir düğüm indeksidir.
  • 0 düğümünden başlayarak liste her düğümü tam olarak bir kez ziyaret eder ve ardından -1 düğümüne ulaşır. Döngü yoktur.

Örnekler

Girdi
next = [2, 3, 4, -1, 1]values = [1, 4, 2, 5, 3]k = 2
Çıktı
[2, 1, 4, 3, 5]
Açıklama
Liste 1, 2, 3, 4, 5 şeklindedir (düğümler 0, 2, 4, 1, 3). 1, 2 ve 3, 4 çiftleri ters çevrilir ve yalnızca 5, k = 2 değerinden daha kısa olduğundan sonda kalır.
challenge icon

Ek soru

Bunu, bir grubu tersine çevirip listenin geri kalanı üzerinde özyinelemeli çağrı yaparak yazabilir misin? Bu ne kadar ek bellek kullanır?

Kodu sıfırla
def reverseKGroup(next, values, k):
    # Kodu buraya yazın

Test #1

Test #2

Test #3

Argümanlar

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

Beklenen Çıktı

[2, 1, 4, 3, 5]