Menu
CoddyTech

Palindrome Linked 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, suis donc les liens.

Renvoie true si les valeurs lues de la tête à la fin sont les mêmes que celles lues de la fin vers la tête, et false sinon.

Fonction

isPalindrome(next: integer-array, values: integer-array) → boolean
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
Renvoieboolean
vrai si la liste se lit de la même façon dans les deux sens

Contraintes

  • 1 ≤ L ≤ 5000, où L est la longueur de next et de values.
  • -100 ≤ values[i] ≤ 100
  • 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 = [4, 3, -1, 2, 1]values = [3, 4, 3, 1, 1]
Sortie
true
Explication
Les liens visitent les nœuds 0, 4, 1, 3, 2, donc la liste se lit 3, 1, 4, 1, 3. Les deux 3 correspondent, les deux 1 correspondent, et le 4 au milieu n’a pas de partenaire à vérifier.
challenge icon

Pour aller plus loin

Peux-tu le faire en O(L) avec O(1) mémoire supplémentaire ?

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

Test #1

Test #2

Test #3

Arguments

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

Résultat attendu

true