Menu
CoddyTech

Reverse Nodes in k-Group

DifficileListe chaînéepython iconjava iconcpp iconc iconjs icon+10

Une liste chaînée simple est stockée dans deux tableaux de même longueur. Le nœud i contient 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 peuvent être stockés dans n’importe quel ordre : suivez donc les liens, et non l’ordre du tableau.

Inversez la liste par groupes de k nœuds : les k premiers nœuds sont inversés, puis les k suivants, et ainsi de suite. Le dernier groupe, s’il contient moins de k nœuds, conserve son ordre. Renvoyez les valeurs dans le nouvel ordre de la liste.

Fonction

reverseKGroup(next: integer-array, values: integer-array, k: integer) → 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
kinteger
le nombre de nœuds dans chaque groupe à inverser
Renvoieinteger-array
les valeurs dans l’ordre de la nouvelle liste

Contraintes

  • 1 ≤ L ≤ 5000, où L est la longueur de next et de values.
  • -1000 ≤ values[i] ≤ 1000
  • 1 ≤ k ≤ L
  • Chaque next[i] vaut -1 ou un indice de nœud compris entre 0 et L-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 = [2, 3, 4, -1, 1]values = [1, 4, 2, 5, 3]k = 2
Sortie
[2, 1, 4, 3, 5]
Explication
La liste se lit 1, 2, 3, 4, 5 (nœuds 0, 2, 4, 1, 3). Les paires 1, 2 et 3, 4 sont inversées, et 5 seul est plus court que k = 2, donc il reste à la fin.
challenge icon

Pour aller plus loin

Peux-tu l’écrire de manière récursive, en inversant un groupe et en récursant sur le reste de la liste ? Combien de mémoire supplémentaire cela utilise-t-il ?

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

Test #1

Test #2

Test #3

Arguments

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

Résultat attendu

[2, 1, 4, 3, 5]