Menu
CoddyTech

Reorder List

Ti viene fornita una lista concatenata semplice memorizzata in due array della stessa lunghezza. Il nodo i contiene il valore values[i] ed è collegato al nodo next[i]; -1 termina la lista e la testa è il nodo 0. I nodi non sono memorizzati nell'ordine della lista, quindi segui i collegamenti.

Chiama i nodi nell'ordine della lista L0, L1, ..., Lk. Riordina la lista in modo che segua l'ordine L0, Lk, L1, Lk-1, L2, Lk-2, ...: prima il primo nodo, poi l'ultimo, poi il secondo, poi il penultimo e così via. Restituisci i valori in questo nuovo ordine.

Funzione

reorderList(next: integer-array, values: integer-array) → 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
Restituisceinteger-array
i valori nell'ordine dell'elenco riordinato

Vincoli

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

Esempi

Input
next = [3, 4, -1, 1, 2]values = [1, 3, 5, 2, 4]
Output
[1, 5, 2, 4, 3]
Spiegazione
Seguendo i collegamenti dal nodo 0, la lista si legge 1, 2, 3, 4, 5. Primo, ultimo, secondo e penultimo danno 1, 5, 2, 4, e il valore centrale 3 viene per ultimo.
challenge icon

Per approfondire

Riesci a riordinare i collegamenti stessi usando memoria aggiuntiva O(1)?

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

Test #1

Test #2

Test #3

Argomenti

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

Output atteso

[1, 5, 2, 4, 3]