Menu
CoddyTech

Intersection of Two Linked Lists

Deux listes simplement chaînées se trouvent dans un même ensemble de nœuds. Le nœud i pointe vers le nœud next[i], et -1 marque la fin d’une liste. La liste A commence au nœud headA et la liste B au nœud headB. Les nœuds ne sont pas stockés dans un ordre particulier : suivez donc les liens.

Les deux listes peuvent se rejoindre : à partir d’un certain nœud, elles continuent à travers les mêmes nœuds jusqu’à la fin. Renvoyez l’indice du premier nœud commun aux deux listes, ou -1 si elles n’ont aucun nœud en commun.

Fonction

getIntersectionNode(next: integer-array, headA: integer, headB: integer) → integer
nextinteger-array
l’index du nœud vers lequel chaque nœud pointe, ou -1 pour le dernier nœud d’une liste
headAinteger
le premier nœud de la liste A
headBinteger
le premier nœud de la liste B
Renvoieinteger
le premier nœud que les deux listes ont en commun, ou -1

Contraintes

  • 2 ≤ n ≤ 104, où n est la longueur de next.
  • Chaque next[i] vaut -1 ou un indice de nœud compris entre 0 et n-1.
  • 0 ≤ headA, headB ≤ n-1 et headA ≠ headB.
  • Les deux listes se terminent par -1 sans visiter un nœud deux fois. Il n’y a pas de cycle.
  • Chaque nœud se trouve dans la liste A, dans la liste B ou dans les deux.

Exemples

Entrée
next = [-1, 4, 1, 5, 0, 1]headA = 3headB = 2
Sortie
1
Explication
A parcourt 3, 5, 1, 4, 0 et B parcourt 2, 1, 4, 0. À partir du nœud 1, ils partagent tous les nœuds, et aucun nœud antérieur de A ne se trouve sur le parcours de B ; la réponse est donc 1.
challenge icon

Pour aller plus loin

Peux-tu trouver le nœud en O(m + k) temps avec O(1) mémoire supplémentaire ?

Réinitialiser le code
def getIntersectionNode(next, headA, headB):
    # Écrivez le code ici

Test #1

Test #2

Test #3

Arguments

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

Résultat attendu

1