Menu
CoddyTech

Merge Two Sorted Lists

Ricevi due liste concatenate singolarmente, ciascuna memorizzata in due array della stessa lunghezza. Nella prima lista, il nodo i contiene il valore values1[i] e punta al nodo next1[i]. La seconda lista funziona allo stesso modo con next2 e values2. In entrambe le liste, -1 indica la fine della lista e la testa è il nodo 0. I nodi non sono memorizzati nell'ordine della lista, quindi segui i collegamenti.

Ciascuna lista è ordinata in modo non decrescente lungo i collegamenti. Unisci le due liste in un'unica lista ordinata e restituisci i valori nell'ordine corretto.

Funzione

mergeTwoLists(next1: integer-array, values1: integer-array, next2: integer-array, values2: integer-array) → integer-array
next1integer-array
l'indice del nodo a cui è collegato ciascun nodo della prima lista, oppure -1 per il suo ultimo nodo
values1integer-array
il valore contenuto in ciascun nodo della prima lista
next2integer-array
l'indice del nodo a cui è collegato ciascun nodo della seconda lista, oppure -1 per il suo ultimo nodo
values2integer-array
il valore contenuto in ciascun nodo della seconda lista
Restituisceinteger-array
i valori della lista unita, nell’ordine

Vincoli

  • 1 ≤ L1 ≤ 2000, dove L1 è la lunghezza di next1 e di values1.
  • 1 ≤ L2 ≤ 2000, dove L2 è la lunghezza di next2 e di values2.
  • -1000 ≤ values1[i], values2[j] ≤ 1000
  • Ogni elemento di next1 è -1 oppure l'indice di un nodo della prima lista, e ogni elemento di next2 è -1 oppure l'indice di un nodo della seconda lista.
  • Partendo dal nodo 0, ogni lista visita ciascuno dei suoi nodi esattamente una volta e poi raggiunge -1. Non c'è alcun ciclo.
  • Lungo i suoi collegamenti, ogni lista è ordinata in ordine non decrescente.

Esempi

Input
next1 = [2, -1, 1]values1 = [1, 6, 4]next2 = [3, 2, -1, 1]values2 = [2, 7, 9, 3]
Output
[1, 2, 3, 4, 6, 7, 9]
Spiegazione
Seguendo i collegamenti, la prima lista visita i nodi 0, 2, 1 e legge 1, 4, 6; la seconda legge 2, 3, 7, 9. Prendendo ogni volta il valore più piccolo in testa si ottiene 1, 2, 3, 4, 6, 7, 9.
challenge icon

Per approfondire

Riesci a unire k liste ordinate in tempo O(N log k), dove N è il numero totale di nodi?

Ripristina il codice
def mergeTwoLists(next1, values1, next2, values2):
    # Scrivi il codice qui

Test #1

Test #2

Test #3

Argomenti

next1 = [2, -1, 1]
values1 = [1, 6, 4]
next2 = [3, 2, -1, 1]
values2 = [2, 7, 9, 3]

Output atteso

[1, 2, 3, 4, 6, 7, 9]