Menu
CoddyTech

Remove Nth Node From End of List

Hai una lista concatenata singola memorizzata in due array della stessa lunghezza. Il nodo i contiene il valore values[i] e punta al nodo next[i]; -1 termina la lista e la testa è il nodo 0. I nodi non sono memorizzati nell’ordine della lista, quindi segui i collegamenti.

Rimuovi l’n-esimo nodo contando dalla fine della lista, dove l’ultimo nodo è il 1º dalla fine. Restituisci i valori dei nodi rimanenti, nell’ordine della lista.

Funzione

removeNthFromEnd(values: integer-array, next: integer-array, n: integer) → integer-array
valuesinteger-array
il valore contenuto in ciascun nodo
nextinteger-array
l'indice del nodo a cui è collegato ciascun nodo, oppure -1 per l'ultimo nodo
ninteger
quale nodo rimuovere, contando dalla fine, dove 1 è l’ultimo nodo
Restituisceinteger-array
i valori rimanenti nell'ordine della lista, vuota quando viene rimosso l'unico nodo

Vincoli

  • 1 ≤ L ≤ 5000, dove L è la lunghezza di values e di next.
  • -100 ≤ values[i] ≤ 100
  • 1 ≤ n ≤ L
  • Ogni next[i] è -1 oppure un indice di nodo da 0 a L-1.
  • Partendo dal nodo 0, la lista visita ogni nodo esattamente una volta e poi raggiunge -1. Non c'è alcun ciclo.

Esempi

Input
values = [5, 9, 2, 7, 6]next = [2, 3, 4, -1, 1]n = 2
Output
[5, 2, 6, 7]
Spiegazione
Seguendo i collegamenti a partire dal nodo 0, si visitano i nodi 0, 2, 4, 1, 3, quindi la lista è 5, 2, 6, 9, 7. Il 2º elemento dalla fine è il nodo 1, valore 9, e senza di esso la lista è 5, 2, 6, 7. L'elemento dell'array values[5-2] = 7 è l'ultimo nodo, non quello da rimuovere.

lock icon+14 test nascosti all’invio

challenge icon

Per approfondire

Riesci a trovare e scollegare il nodo in un unico passaggio, senza prima contarne la lunghezza?

Ripristina il codice
def removeNthFromEnd(values, next, n):
    # Scrivi il codice qui
Casi di test

Caso 1

Caso 2

Caso 3

Input

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

Atteso

[5, 2, 6, 7]