Menu
CoddyTech

Reorder List

Aynı uzunluktaki iki dizide saklanan tek yönlü bir bağlı listen var. i düğümü values[i] değerini tutar ve next[i] düğümüne bağlanır; -1 listenin sonunu belirtir ve baş düğüm 0'dır. Düğümler liste sırasına göre saklanmadığından bağlantıları takip et.

Liste sırasındaki düğümlere L0, L1, ..., Lk adını ver. Listeyi L0, Lk, L1, Lk-1, L2, Lk-2, ... sırasına göre yeniden düzenle: önce ilk düğüm, sonra son düğüm, ardından ikinci düğüm, sonra sondan ikinci düğüm ve bu şekilde devam et. Değerleri bu yeni sırayla döndür.

Fonksiyon

reorderList(next: integer-array, values: integer-array) → 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 bir düğümün tuttuğu değer
Döndürürinteger-array
yeniden sıralanmış listedeki sıraya göre değerler

Kısıtlar

  • 1 ≤ n ≤ 4000; burada n, next ve values uzunluğudur.
  • -1000 ≤ values[i] ≤ 1000
  • Her bir next[i], -1 ya da 0 ile n-1 arasında bir düğüm indeksidir.
  • Başlangıç düğümü 0 olan liste, her düğümü tam olarak bir kez ziyaret eder ve ardından -1 değerine ulaşır. Döngü yoktur.

Örnekler

Girdi
next = [3, 4, -1, 1, 2]values = [1, 3, 5, 2, 4]
Çıktı
[1, 5, 2, 4, 3]
Açıklama
0 düğümünden bağlantıları takip ettiğimizde liste 1, 2, 3, 4, 5 şeklinde okunur. İlk, son, ikinci ve sondan ikinci değerler 1, 5, 2, 4 olur ve orta değer olan 3 en sona gelir.
challenge icon

Ek soru

Bağlantıların kendilerini O(1) ek bellek kullanarak yeniden sıralayabilir misin?

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

Test #1

Test #2

Test #3

Argümanlar

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

Beklenen Çıktı

[1, 5, 2, 4, 3]