Menu
CoddyTech

Remove Nth Node From End of List

Recibes una lista enlazada simple almacenada en dos arreglos de la misma longitud. El nodo i contiene el valor values[i] y apunta al 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.

Elimina el nodo número n contando desde el final de la lista, donde el último nodo es el primero desde el final. Devuelve los valores de los nodos restantes, en el orden de la lista.

Función

removeNthFromEnd(values: integer-array, next: integer-array, n: integer) → integer-array
valuesinteger-array
el valor que contiene cada nodo
nextinteger-array
el índice del nodo al que enlaza cada nodo, o -1 para el último nodo
ninteger
qué nodo eliminar, contando desde el final, donde 1 es el último nodo
Devuelveinteger-array
los valores restantes en el orden de la lista; queda vacía cuando se elimina el único nodo

Restricciones

  • 1 ≤ L ≤ 5000, donde L es la longitud de values y de next.
  • -100 ≤ values[i] ≤ 100
  • 1 ≤ n ≤ L
  • Cada next[i] es -1 o un índice de nodo de 0 a L-1.
  • Comenzando 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 = [5, 9, 2, 7, 6]next = [2, 3, 4, -1, 1]n = 2
Salida
[5, 2, 6, 7]
Explicación
Al seguir los enlaces desde el nodo 0, se visitan los nodos 0, 2, 4, 1, 3, por lo que la lista es 5, 2, 6, 9, 7. El penúltimo nodo es el nodo 1, con valor 9, y sin él la lista es 5, 2, 6, 7. La entrada del arreglo values[5-2] = 7 es el último nodo, no el que se debe eliminar.

lock icon+14 pruebas ocultas al enviar

challenge icon

Para ir más allá

¿Puedes encontrar y desvincular el nodo en una sola pasada, sin contar primero la longitud?

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

Caso 1

Caso 2

Caso 3

Entrada

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

Esperado

[5, 2, 6, 7]