Menu
CoddyTech

Reorder List

Recibes una lista enlazada simple almacenada en dos matrices de la misma longitud. El nodo i contiene el valor values[i] y enlaza con el nodo next[i]; -1 termina 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.

Llama a los nodos en el orden de la lista L0, L1, ..., Lk. Reordena la lista para que quede L0, Lk, L1, Lk-1, L2, Lk-2, ...: primero el primer nodo, después el último, después el segundo, después el penúltimo, y así sucesivamente. Devuelve los valores en ese nuevo orden.

Función

reorderList(next: integer-array, values: integer-array) → integer-array
nextinteger-array
el índice del nodo al que está enlazado cada nodo, o -1 para el último nodo
valuesinteger-array
el valor que contiene cada nodo
Devuelveinteger-array
los valores en el orden de la lista reordenada

Restricciones

  • 1 ≤ n ≤ 4000, donde n es la longitud de next y de values.
  • -1000 ≤ values[i] ≤ 1000
  • Cada next[i] es -1 o un índice de nodo de 0 a n-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 = [3, 4, -1, 1, 2]values = [1, 3, 5, 2, 4]
Salida
[1, 5, 2, 4, 3]
Explicación
Siguiendo los enlaces desde el nodo 0, la lista se lee 1, 2, 3, 4, 5. Primero, último, segundo y penúltimo dan 1, 5, 2, 4, y el valor del medio 3 va al final.
challenge icon

Para ir más allá

¿Puedes reordenar los enlaces en sí con memoria adicional O(1)?

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

Prueba #1

Prueba #2

Prueba #3

Argumentos

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

Salida Esperada

[1, 5, 2, 4, 3]