Menu
CoddyTech

Reorder List

Kamu mendapatkan singly linked list yang disimpan dalam dua array dengan panjang yang sama. Node i menyimpan nilai values[i] dan terhubung ke node next[i], -1 mengakhiri list, dan head-nya adalah node 0. Node-node tersebut tidak disimpan sesuai urutan list, jadi ikuti tautannya.

Sebut node-node sesuai urutannya dalam list sebagai L0, L1, ..., Lk. Susun ulang list sehingga urutannya menjadi L0, Lk, L1, Lk-1, L2, Lk-2, ...: node pertama, lalu node terakhir, lalu node kedua, lalu node kedua dari belakang, dan seterusnya. Kembalikan nilai-nilai dalam urutan baru tersebut.

Fungsi

reorderList(next: integer-array, values: integer-array) → integer-array
nextinteger-array
indeks node yang ditautkan oleh setiap node, atau -1 untuk node terakhir
valuesinteger-array
nilai yang disimpan oleh setiap node
Mengembalikaninteger-array
nilai dalam urutan list yang disusun ulang

Batasan

  • 1 ≤ n ≤ 4000, dengan n sebagai panjang next dan values.
  • -1000 ≤ values[i] ≤ 1000
  • Setiap next[i] adalah -1 atau indeks node dari 0 hingga n-1.
  • Mulai dari node 0, list mengunjungi setiap node tepat satu kali lalu mencapai -1. Tidak ada siklus.

Contoh

Input
next = [3, 4, -1, 1, 2]values = [1, 3, 5, 2, 4]
Output
[1, 5, 2, 4, 3]
Penjelasan
Dengan mengikuti tautan dari node 0, daftar tersebut terbaca 1, 2, 3, 4, 5. Elemen pertama, terakhir, kedua, dan kedua dari belakang menghasilkan 1, 5, 2, 4, lalu nilai tengah 3 muncul terakhir.
challenge icon

Pertanyaan lanjutan

Dapatkah kamu mengurutkan ulang tautannya dengan memori tambahan O(1)?

Reset kode
def reorderList(next, values):
    # Tulis kodemu di sini

Tes #1

Tes #2

Tes #3

Argumen

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

Output yang diharapkan

[1, 5, 2, 4, 3]