Menu
CoddyTech

Intersection of Two Linked Lists

Due liste concatenate singolarmente vivono in un unico insieme di nodi. Il nodo i punta al nodo next[i] e -1 termina una lista. La lista A inizia dal nodo headA e la lista B dal nodo headB. I nodi non sono memorizzati in un ordine particolare, quindi segui i collegamenti.

Le due liste possono convergere: a partire da un certo nodo, proseguono attraverso gli stessi nodi fino alla fine. Restituisci l’indice del primo nodo presente in entrambe le liste, oppure -1 se non condividono alcun nodo.

Funzione

getIntersectionNode(next: integer-array, headA: integer, headB: integer) → integer
nextinteger-array
l'indice del nodo a cui rimanda ciascun nodo, oppure -1 per l'ultimo nodo di una lista
headAinteger
il primo nodo della lista A
headBinteger
il primo nodo della lista B
Restituisceinteger
il primo nodo condiviso dalle due liste, oppure -1

Vincoli

  • 2 ≤ n ≤ 104, dove n è la lunghezza di next.
  • Ogni next[i] è -1 oppure un indice di nodo da 0 a n-1.
  • 0 ≤ headA, headB ≤ n-1 e headA ≠ headB.
  • Entrambi gli elenchi terminano con -1 senza visitare due volte alcun nodo. Non c’è alcun ciclo.
  • Ogni nodo è nell'elenco A, nell'elenco B o in entrambi.

Esempi

Input
next = [-1, 4, 1, 5, 0, 1]headA = 3headB = 2
Output
1
Spiegazione
A visita 3, 5, 1, 4, 0 e B visita 2, 1, 4, 0. A partire dal nodo 1 condividono ogni nodo e nessun nodo precedente di A si trova in B, quindi la risposta è 1.
challenge icon

Per approfondire

Riesci a trovare il nodo in O(m + k) tempo con O(1) memoria aggiuntiva?

Ripristina il codice
def getIntersectionNode(next, headA, headB):
    # Scrivi il codice qui

Test #1

Test #2

Test #3

Argomenti

next = [-1, 4, 1, 5, 0, 1]
headA = 3
headB = 2

Output atteso

1