Menu
CoddyTech

Palindrome Linked List

Recibes una lista enlazada simple almacenada en dos arreglos de la misma longitud. El nodo i contiene el valor values[i] y enlaza con el nodo next[i]; -1 marca el final de la lista, y la cabeza es el nodo 0. Los nodos no están almacenados en el orden de la lista, así que sigue los enlaces.

Devuelve true si los valores se leen igual desde la cabeza hasta el final que desde el final hasta la cabeza, y false en caso contrario.

Función

isPalindrome(next: integer-array, values: integer-array) → boolean
nextinteger-array
el índice del nodo al que enlaza cada nodo, o -1 para el último nodo
valuesinteger-array
el valor que contiene cada nodo
Devuelveboolean
true si la lista se lee igual en ambas direcciones

Restricciones

  • 1 ≤ L ≤ 5000, donde L es la longitud de next y de values.
  • -100 ≤ values[i] ≤ 100
  • Cada next[i] es -1 o un índice de nodo de 0 a L-1.
  • Empezando en el nodo 0, la lista visita cada nodo exactamente una vez y después llega a -1. No hay ningún ciclo.

Ejemplos

Entrada
next = [4, 3, -1, 2, 1]values = [3, 4, 3, 1, 1]
Salida
true
Explicación
Los enlaces visitan los nodos 0, 4, 1, 3, 2, así que la lista es 3, 1, 4, 1, 3. Los dos 3 coinciden, los dos 1 coinciden y el 4 del medio no tiene pareja con la que comprobarlo.
challenge icon

Para ir más allá

¿Puedes hacerlo en tiempo O(L) con memoria adicional O(1)?

Restablecer código
def isPalindrome(next, values):
    # Escribe el código aquí

Prueba #1

Prueba #2

Prueba #3

Argumentos

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

Salida Esperada

true