Menu
CoddyTech

Middle of the Linked List

Recibes una lista simplemente enlazada almacenada en dos arreglos de la misma longitud. El nodo i contiene el valor values[i] y enlaza con el nodo next[i]; -1 indica 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 el valor del nodo central. Cuando la lista tiene un número par de nodos, hay dos nodos centrales; devuelve el valor del segundo.

Función

middleNode(values: integer-array, next: integer-array) → integer
valuesinteger-array
el valor almacenado por cada nodo
nextinteger-array
el índice del nodo al que se conecta cada nodo, o -1 para el último nodo
Devuelveinteger
el valor del nodo central, el segundo nodo central cuando la longitud es par

Restricciones

  • 1 ≤ n ≤ 5000, donde n es la longitud de values y de next.
  • -104 ≤ values[i] ≤ 104
  • 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
values = [4, 9, 2, 7, 5]next = [3, -1, 1, 4, 2]
Salida
5
Explicación
Siguiendo los enlaces desde el nodo 0 se obtienen los nodos 0, 3, 4, 2, 1, así que la lista queda 4, 7, 5, 2, 9. El tercero de los cinco es el nodo 4, cuyo valor es 5. La entrada central del propio arreglo, values[2] = 2, es un nodo diferente.

lock icon+13 pruebas ocultas al enviar

challenge icon

Para ir más allá

¿Puedes devolver el nodo que está a un tercio del recorrido por la lista en una sola pasada? ¿A qué velocidad se movería cada puntero y dónde te detendrías?

Restablecer código
def middleNode(values, next):
    # Escribe el código aquí
Casos de prueba

Caso 1

Caso 2

Caso 3

Entrada

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

Esperado

5