Menu
CoddyTech

Middle of the Linked List

Vous disposez d’une liste chaînée simple 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.

Renvoyez la valeur du nœud du milieu. Si la liste contient un nombre pair de nœuds, il y a deux nœuds du milieu ; renvoyez la valeur du second.

Fonction

middleNode(values: integer-array, next: integer-array) → integer
valuesinteger-array
la valeur détenue par chaque nœud
nextinteger-array
l’indice du nœud vers lequel chaque nœud pointe, ou -1 pour le dernier nœud
Renvoieinteger
la valeur du nœud du milieu, le deuxième nœud du milieu lorsque la longueur est paire

Contraintes

  • 1 ≤ n ≤ 5000, où n est la longueur de values et de next.
  • -104 ≤ values[i] ≤ 104
  • Chaque next[i] vaut -1 ou correspond à l’indice d’un 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
values = [4, 9, 2, 7, 5]next = [3, -1, 1, 4, 2]
Sortie
5
Explication
En suivant les liens à partir du nœud 0, on obtient les nœuds 0, 3, 4, 2, 1, donc la liste est 4, 7, 5, 2, 9. Le troisième des cinq est le nœud 4, dont la valeur est 5. L’entrée du milieu du tableau lui-même, values[2] = 2, correspond à un nœud différent.

lock icon+13 tests cachés à la soumission

challenge icon

Pour aller plus loin

Peux-tu renvoyer le nœud situé au tiers de la liste en un seul parcours ? À quelle vitesse chaque pointeur avancerait-il, et où t’arrêterais-tu ?

Réinitialiser le code
def middleNode(values, next):
    # Écrivez le code ici
Cas de test

Cas 1

Cas 2

Cas 3

Entrée

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

Attendu

5