Menu
CoddyTech

Intersection of Two Linked Lists

Zwei einfach verkettete Listen befinden sich in einem gemeinsamen Knotenpool. Knoten i verweist auf Knoten next[i], und -1 beendet eine Liste. Liste A beginnt bei Knoten headA und Liste B bei Knoten headB. Die Knoten sind in keiner bestimmten Reihenfolge gespeichert, folge also den Verweisen.

Die beiden Listen können aufeinander treffen: Ab einem bestimmten Knoten verlaufen sie bis zum Ende über dieselben Knoten. Gib den Index des ersten Knotens zurück, der in beiden Listen vorkommt, oder -1, wenn sie keinen Knoten gemeinsam haben.

Funktion

getIntersectionNode(next: integer-array, headA: integer, headB: integer) → integer
nextinteger-array
der Index des Knotens, auf den jeder Knoten verweist, oder -1 für den letzten Knoten einer Liste
headAinteger
der erste Knoten von Liste A
headBinteger
der erste Knoten der Liste B
Gibt zurückinteger
der erste Knoten, den die beiden Listen gemeinsam haben, oder -1

Einschränkungen

  • 2 ≤ n ≤ 104, wobei n die Länge von next ist.
  • Jedes next[i] ist -1 oder ein Knotenindex von 0 bis n-1.
  • 0 ≤ headA, headB ≤ n-1 und headA ≠ headB.
  • Beide Listen enden bei -1, ohne einen Knoten zweimal zu besuchen. Es gibt keinen Zyklus.
  • Jeder Knoten befindet sich in Liste A, in Liste B oder in beiden.

Beispiele

Eingabe
next = [-1, 4, 1, 5, 0, 1]headA = 3headB = 2
Ausgabe
1
Erklärung
A besucht 3, 5, 1, 4, 0 und B besucht 2, 1, 4, 0. Ab Knoten 1 teilen sie sich jeden Knoten, und kein früherer Knoten von A liegt auf B, also lautet die Antwort 1.
challenge icon

Weiterführende Frage

Kannst du den Knoten in O(m + k) Zeit mit O(1) zusätzlichem Speicher finden?

Code zurücksetzen
def getIntersectionNode(next, headA, headB):
    # Schreibe hier den Code

Test #1

Test #2

Test #3

Argumente

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

Erwartete Ausgabe

1