Menu
CoddyTech

Intersection of Two Linked Lists

Duas listas simplesmente encadeadas estão armazenadas em um único conjunto de nós. O nó i aponta para o nó next[i], e -1 encerra uma lista. A lista A começa no nó headA e a lista B, no nó headB. Os nós não estão armazenados em uma ordem específica, então siga os apontadores.

As duas listas podem se encontrar: a partir de algum nó, elas continuam pelos mesmos nós até o fim. Retorne o índice do primeiro nó que está nas duas listas, ou -1 se elas não compartilharem nenhum nó.

Função

getIntersectionNode(next: integer-array, headA: integer, headB: integer) → integer
nextinteger-array
o índice do nó ao qual cada nó está ligado, ou -1 para o último nó de uma lista
headAinteger
o primeiro nó da lista A
headBinteger
o primeiro nó da lista B
Retornainteger
o primeiro nó compartilhado pelas duas listas, ou -1

Restrições

  • 2 ≤ n ≤ 104, em que n é o comprimento de next.
  • Cada next[i] é -1 ou um índice de nó de 0 a n-1.
  • 0 ≤ headA, headB ≤ n-1 e headA ≠ headB.
  • Ambas as listas terminam em -1 sem visitar um nó duas vezes. Não há ciclo.
  • Cada nó está na lista A, na lista B ou em ambas.

Exemplos

Entrada
next = [-1, 4, 1, 5, 0, 1]headA = 3headB = 2
Saída
1
Explicação
A visita 3, 5, 1, 4, 0 e B visita 2, 1, 4, 0. A partir do nó 1, eles compartilham todos os nós, e nenhum nó anterior de A está em B, então a resposta é 1.
challenge icon

Para ir além

Você consegue encontrar o nó em tempo O(m + k) com memória extra O(1)?

Redefinir código
def getIntersectionNode(next, headA, headB):
    # Escreva o código aqui

Teste #1

Teste #2

Teste #3

Argumentos

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

Saída Esperada

1