Menu
CoddyTech

Middle of the Linked List

Ti viene fornita 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.

Restituisci il valore del nodo centrale. Quando la lista ha un numero pari di nodi, ci sono due nodi centrali; restituisci il valore del secondo.

Funzione

middleNode(values: integer-array, next: integer-array) → integer
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
Restituisceinteger
il valore del nodo centrale, il secondo nodo centrale quando la lunghezza è pari

Vincoli

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

Esempi

Input
values = [4, 9, 2, 7, 5]next = [3, -1, 1, 4, 2]
Output
5
Spiegazione
Seguendo i collegamenti dal nodo 0 si ottengono i nodi 0, 3, 4, 2, 1, quindi la lista contiene 4, 7, 5, 2, 9. Il terzo dei cinque è il nodo 4, il cui valore è 5. L'elemento centrale dell'array stesso, values[2] = 2, è un nodo diverso.

lock icon+13 test nascosti all’invio

challenge icon

Per approfondire

Riesci a restituire il nodo che si trova a un terzo del percorso lungo la lista in un solo passaggio? A quale velocità si muoverebbe ciascun puntatore e dove ti fermeresti?

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

Caso 1

Caso 2

Caso 3

Input

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

Atteso

5