Menu
CoddyTech

Merge Two Sorted Lists

Tu reçois deux listes simplement chaînées, chacune stockée dans deux tableaux de même longueur. Dans la première liste, le nœud i contient la valeur values1[i] et pointe vers le nœud next1[i]. La seconde liste fonctionne de la même manière avec next2 et values2. Dans les deux listes, -1 marque la fin de la liste et la tête est le nœud 0. Les nœuds ne sont pas stockés dans l’ordre de la liste : suis donc les liens.

Chaque liste est triée par ordre non décroissant le long de ses liens. Fusionne les deux listes en une seule liste triée et renvoie ses valeurs dans l’ordre.

Fonction

mergeTwoLists(next1: integer-array, values1: integer-array, next2: integer-array, values2: integer-array) → integer-array
next1integer-array
l’index du nœud vers lequel pointe chaque nœud de la première liste, ou -1 pour son dernier nœud
values1integer-array
la valeur contenue dans chaque nœud de la première liste
next2integer-array
l’index du nœud vers lequel pointe chaque nœud de la deuxième liste, ou -1 pour son dernier nœud
values2integer-array
la valeur détenue par chaque nœud de la deuxième liste
Renvoieinteger-array
les valeurs de la liste fusionnée, dans l’ordre

Contraintes

  • 1 ≤ L1 ≤ 2000, où L1 est la longueur de next1 et de values1.
  • 1 ≤ L2 ≤ 2000, où L2 est la longueur de next2 et de values2.
  • -1000 ≤ values1[i], values2[j] ≤ 1000
  • Chaque élément de next1 est -1 ou un indice de nœud de la première liste, et chaque élément de next2 est -1 ou un indice de nœud de la deuxième liste.
  • En partant du nœud 0, chaque liste visite chacun de ses nœuds exactement une fois, puis atteint -1. Il n’y a pas de cycle.
  • Le long de ses liens, chaque liste est triée par ordre non décroissant.

Exemples

Entrée
next1 = [2, -1, 1]values1 = [1, 6, 4]next2 = [3, 2, -1, 1]values2 = [2, 7, 9, 3]
Sortie
[1, 2, 3, 4, 6, 7, 9]
Explication
En suivant les liens, la première liste visite les nœuds 0, 2, 1 et lit 1, 4, 6 ; la seconde lit 2, 3, 7, 9. En prenant à chaque fois le plus petit élément en tête, on obtient 1, 2, 3, 4, 6, 7, 9.
challenge icon

Pour aller plus loin

Peux-tu fusionner k listes triées en O(N log k) temps, où N est le nombre total de nœuds ?

Réinitialiser le code
def mergeTwoLists(next1, values1, next2, values2):
    # Écrivez le code ici

Test #1

Test #2

Test #3

Arguments

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

Résultat attendu

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