Menu
CoddyTech

Sort List

Tu reçois une liste simplement chaînée stockée dans deux tableaux de même longueur. Le nœud i contient la valeur values[i] et pointe vers le nœud next[i], -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, et les tableaux peuvent également contenir des nœuds restants que le parcours à partir du nœud 0 n’atteint jamais. Ceux-ci ne font pas partie de la liste, même lorsque leurs liens pointent vers elle.

Trie la liste par ordre non décroissant de valeur et renvoie les valeurs de ses nœuds dans cet ordre.

Fonction

sortList(next: integer-array, values: integer-array) → integer-array
nextinteger-array
l’indice du nœud vers lequel chaque nœud pointe, ou -1 pour le dernier nœud
valuesinteger-array
la valeur détenue par chaque nœud
Renvoieinteger-array
les valeurs des nœuds de la liste, de la plus petite à la plus grande

Contraintes

  • 1 ≤ n ≤ 4000, où n est la longueur de next et de values.
  • -1000 ≤ values[i] ≤ 1000
  • Chaque next[i] vaut -1 ou un indice de nœud compris entre 0 et n-1.
  • En partant du nœud 0, la liste atteint -1 sans visiter deux fois un nœud.
  • Les nœuds que le parcours depuis le nœud 0 n’atteint pas ne font pas partie de la liste. Leurs entrées next peuvent pointer n’importe où.

Exemples

Entrée
next = [3, -1, 4, 2, 1]values = [4, 1, 3, 2, 5]
Sortie
[1, 2, 3, 4, 5]
Explication
Le parcours à partir du nœud 0 visite les nœuds 0, 3, 2, 4, 1, donc la liste est 4, 2, 3, 5, 1. Triée, elle donne 1, 2, 3, 4, 5.
challenge icon

Pour aller plus loin

Peux-tu trier en reliant à nouveau les nœuds en O(n log n), sans copier les valeurs ?

Réinitialiser le code
def sortList(next, values):
    # Écrivez le code ici

Test #1

Test #2

Test #3

Arguments

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

Résultat attendu

[1, 2, 3, 4, 5]