Menu
CoddyTech

Merge Two Sorted Lists

Du erhältst zwei einfach verkettete Listen, die jeweils in zwei Arrays gleicher Länge gespeichert sind. In der ersten Liste enthält Knoten i den Wert values1[i] und verweist auf Knoten next1[i]. Die zweite Liste funktioniert genauso mit next2 und values2. In beiden Listen beendet -1 die Liste, und der Kopf ist Knoten 0. Die Knoten sind nicht in Listenreihenfolge gespeichert, folge also den Verweisen.

Jede Liste ist entlang ihrer Verweise nicht absteigend sortiert. Führe die beiden zu einer sortierten Liste zusammen und gib ihre Werte der Reihe nach zurück.

Funktion

mergeTwoLists(next1: integer-array, values1: integer-array, next2: integer-array, values2: integer-array) → integer-array
next1integer-array
der Index des Knotens, auf den jeder Knoten der ersten Liste verweist, oder -1 für seinen letzten Knoten
values1integer-array
der von jedem Knoten der ersten Liste gehaltene Wert
next2integer-array
der Index des Knotens, auf den jeder Knoten der zweiten Liste verweist, oder -1 für den letzten Knoten der zweiten Liste
values2integer-array
der Wert, der von jedem Knoten der zweiten Liste gehalten wird
Gibt zurückinteger-array
die Werte der zusammengeführten Liste, in Reihenfolge

Einschränkungen

  • 1 ≤ L1 ≤ 2000, wobei L1 die Länge von next1 und values1 ist.
  • 1 ≤ L2 ≤ 2000, wobei L2 die Länge von next2 und values2 ist.
  • -1000 ≤ values1[i], values2[j] ≤ 1000
  • Jeder Eintrag von next1 ist -1 oder ein Knotenindex der ersten Liste, und jeder Eintrag von next2 ist -1 oder ein Knotenindex der zweiten Liste.
  • Beginnend beim Knoten 0, besucht jede Liste jeden ihrer Knoten genau einmal und erreicht dann -1. Es gibt keinen Zyklus.
  • Entlang ihrer Verknüpfungen ist jede Liste in nicht absteigender Reihenfolge sortiert.

Beispiele

Eingabe
next1 = [2, -1, 1]values1 = [1, 6, 4]next2 = [3, 2, -1, 1]values2 = [2, 7, 9, 3]
Ausgabe
[1, 2, 3, 4, 6, 7, 9]
Erklärung
Wenn man den Verknüpfungen folgt, besucht die erste Liste die Knoten 0, 2, 1 und liest 1, 4, 6; die zweite liest 2, 3, 7, 9. Nimmt man jedes Mal das kleinere Element am Anfang, erhält man 1, 2, 3, 4, 6, 7, 9.
challenge icon

Weiterführende Frage

Kannst du k sortierte Listen in O(N log k) Zeit zusammenführen, wobei N die Gesamtzahl der Knoten ist?

Code zurücksetzen
def mergeTwoLists(next1, values1, next2, values2):
    # Schreibe hier den Code

Test #1

Test #2

Test #3

Argumente

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

Erwartete Ausgabe

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