Menu
CoddyTech

Intersection of Two Linked Lists

Dos listas simplemente enlazadas están en un mismo conjunto de nodos. El nodo i enlaza con el nodo next[i], y -1 marca el final de una lista. La lista A empieza en el nodo headA y la lista B, en el nodo headB. Los nodos no están almacenados en ningún orden particular, así que sigue los enlaces.

Las dos listas pueden encontrarse: a partir de cierto nodo, continúan por los mismos nodos hasta el final. Devuelve el índice del primer nodo que aparece en ambas listas, o -1 si no comparten ningún nodo.

Función

getIntersectionNode(next: integer-array, headA: integer, headB: integer) → integer
nextinteger-array
el índice del nodo al que enlaza cada nodo, o -1 para el último nodo de una lista
headAinteger
el primer nodo de la lista A
headBinteger
el primer nodo de la lista B
Devuelveinteger
el primer nodo que comparten las dos listas, o -1

Restricciones

  • 2 ≤ n ≤ 104, donde n es la longitud de next.
  • Cada next[i] es -1 o un índice de nodo entre 0 y n-1.
  • 0 ≤ headA, headB ≤ n-1 y headA ≠ headB.
  • Ambas listas terminan en -1 sin visitar un nodo dos veces. No hay ningún ciclo.
  • Cada nodo está en la lista A, en la lista B o en ambas.

Ejemplos

Entrada
next = [-1, 4, 1, 5, 0, 1]headA = 3headB = 2
Salida
1
Explicación
A visita 3, 5, 1, 4, 0 y B visita 2, 1, 4, 0. A partir del nodo 1, comparten todos los nodos, y ningún nodo anterior de A está en B, así que la respuesta es 1.
challenge icon

Para ir más allá

¿Puedes encontrar el nodo en tiempo O(m + k) con memoria adicional O(1)?

Restablecer código
def getIntersectionNode(next, headA, headB):
    # Escribe el código aquí

Prueba #1

Prueba #2

Prueba #3

Argumentos

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

Salida Esperada

1