Menu
CoddyTech

Reorder List

On vous donne une liste chaînée 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 : suivez donc les liens.

Appelez les nœuds dans l’ordre de la liste L0, L1, ..., Lk. Réordonnez la liste pour obtenir la séquence L0, Lk, L1, Lk-1, L2, Lk-2, ... : le premier nœud, puis le dernier, puis le deuxième, puis l’avant-dernier, et ainsi de suite. Renvoyez les valeurs dans ce nouvel ordre.

Fonction

reorderList(next: integer-array, values: integer-array) → integer-array
nextinteger-array
l’index 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 dans l’ordre réorganisé de la liste

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 visite chaque nœud exactement une fois, puis atteint -1. Il n’y a pas de cycle.

Exemples

Entrée
next = [3, 4, -1, 1, 2]values = [1, 3, 5, 2, 4]
Sortie
[1, 5, 2, 4, 3]
Explication
En suivant les liens depuis le nœud 0, la liste se lit 1, 2, 3, 4, 5. Le premier, le dernier, le deuxième et l’avant-dernier donnent 1, 5, 2, 4, et la valeur du milieu 3 vient en dernier.
challenge icon

Pour aller plus loin

Peux-tu réorganiser les liens eux-mêmes avec une mémoire supplémentaire en O(1) ?

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

Test #1

Test #2

Test #3

Arguments

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

Résultat attendu

[1, 5, 2, 4, 3]