Menu
CoddyTech

Reverse Nodes in k-Group

SulitLinked listpython iconjava iconcpp iconc iconjs icon+10

Linked list satu arah disimpan dalam dua array dengan panjang yang sama. Node i menyimpan values[i] dan terhubung ke node next[i]; -1 menandai akhir list, dan head adalah node 0. Node dapat disimpan dalam urutan apa pun, jadi ikuti tautannya, bukan urutan array.

Balik urutan list dalam kelompok yang masing-masing terdiri dari k node: k node pertama menjadi terbalik, lalu k node berikutnya, dan seterusnya. Kelompok terakhir yang berisi kurang dari k node tetap mempertahankan urutannya. Kembalikan nilai-nilainya dalam urutan list yang baru.

Fungsi

reverseKGroup(next: integer-array, values: integer-array, k: integer) → integer-array
nextinteger-array
indeks node yang ditautkan oleh setiap node, atau -1 untuk node terakhir
valuesinteger-array
nilai yang disimpan oleh setiap node
kinteger
jumlah node yang perlu dibalik di setiap grup
Mengembalikaninteger-array
nilai-nilai dalam urutan daftar baru

Batasan

  • 1 ≤ L ≤ 5000, dengan L adalah panjang next dan values.
  • -1000 ≤ values[i] ≤ 1000
  • 1 ≤ k ≤ L
  • Setiap next[i] bernilai -1 atau indeks node dari 0 hingga L-1.
  • Dimulai dari simpul 0, list mengunjungi setiap simpul tepat satu kali lalu mencapai -1. Tidak ada siklus.

Contoh

Input
next = [2, 3, 4, -1, 1]values = [1, 4, 2, 5, 3]k = 2
Output
[2, 1, 4, 3, 5]
Penjelasan
list tersebut terbaca sebagai 1, 2, 3, 4, 5 (node 0, 2, 4, 1, 3). Pasangan 1, 2 dan 3, 4 dibalik, dan 5 sendiri lebih pendek daripada k = 2, jadi tetap di urutan terakhir.
challenge icon

Pertanyaan lanjutan

Bisakah kamu menulisnya secara rekursif, dengan membalik satu kelompok dan melakukan rekursi pada sisa list? Berapa banyak memori tambahan yang digunakan?

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

Tes #1

Tes #2

Tes #3

Argumen

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

Output yang diharapkan

[2, 1, 4, 3, 5]