1.代码
class Solution:
def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> Optional[ListNode]:
if not headA or not headB:
return None
point1 = headA
point2 = headB
has_switched1 = False
has_switched2 = False
intersection = None
while point1 != point2:
if point1 is None:
if has_switched1:
return None
point1 = headB
has_switched1 = True
else:
point1 = point1.next
if point2 is None:
if has_switched2:
return None
point2 = headA
has_switched2 = True
else:
point2 = point2.next
return point1
2.思路
通过使用两个指针遍历两个链表,分别从 headA
和 headB
开始,指针在到达链表末尾时切换到另一个链表的头节点。这样,两指针将会在相交节点处相遇,或者都到达 None
。如果存在交点,最终这两个指针会相遇在交点;如果没有交点,则指针同时变为 None
。