Menu
CoddyTech

Reverse Nodes in k-Group

DifficileLista concatenatapython iconjava iconcpp iconc iconjs icon+10

Una lista concatenata semplice è memorizzata in due array della stessa lunghezza. Il nodo i contiene values[i] e punta al nodo next[i]; -1 termina la lista e la testa è il nodo 0. I nodi possono essere memorizzati in qualsiasi ordine, quindi segui i collegamenti, non l’ordine degli array.

Inverti la lista in gruppi di k nodi: i primi k nodi vengono invertiti, poi i successivi k e così via. L’ultimo gruppo, se contiene meno di k nodi, mantiene il proprio ordine. Restituisci i valori nel nuovo ordine della lista.

Funzione

reverseKGroup(next: integer-array, values: integer-array, k: integer) → integer-array
nextinteger-array
l'indice del nodo a cui è collegato ciascun nodo, oppure -1 per l'ultimo nodo
valuesinteger-array
il valore contenuto in ciascun nodo
kinteger
il numero di nodi in ciascun gruppo da invertire
Restituisceinteger-array
i valori nel nuovo ordine dell’elenco

Vincoli

  • 1 ≤ L ≤ 5000, dove L è la lunghezza di next e di values.
  • -1000 ≤ values[i] ≤ 1000
  • 1 ≤ k ≤ L
  • Ogni next[i] è -1 oppure un indice di nodo da 0 a L-1.
  • Partendo dal nodo 0, la lista visita ogni nodo esattamente una volta e poi raggiunge -1. Non c'è alcun ciclo.

Esempi

Input
next = [2, 3, 4, -1, 1]values = [1, 4, 2, 5, 3]k = 2
Output
[2, 1, 4, 3, 5]
Spiegazione
La lista legge 1, 2, 3, 4, 5 (nodi 0, 2, 4, 1, 3). Le coppie 1, 2 e 3, 4 sono invertite, e 5 da solo è più corto di k = 2, quindi rimane in fondo.
challenge icon

Per approfondire

Riesci a scriverlo in modo ricorsivo, invertendo un gruppo e applicando la ricorsione al resto della lista? Quanta memoria aggiuntiva usa?

Ripristina il codice
def reverseKGroup(next, values, k):
    # Scrivi il codice qui

Test #1

Test #2

Test #3

Argomenti

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

Output atteso

[2, 1, 4, 3, 5]