📅  最后修改于: 2023-12-03 15:06:14.695000             🧑  作者: Mango
两个链表的交点 |设置 3
当两个链表存在交点时,找出它们的交点。
我们可以通过遍历两个链表的方式来找到它们的交点。具体的思路可以分为以下几步:
代码实现如下:
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
def getIntersectionNode(headA: ListNode, headB: ListNode) -> ListNode:
len_a, len_b = 0, 0
node_a, node_b = headA, headB
# 获取链表的长度
while node_a:
len_a += 1
node_a = node_a.next
while node_b:
len_b += 1
node_b = node_b.next
# 将较长的链表向后移动
if len_a > len_b:
for i in range(len_a - len_b):
headA = headA.next
else:
for i in range(len_b - len_a):
headB = headB.next
# 同时遍历两个链表,找到交点
while headA and headB:
if headA == headB:
return headA
headA = headA.next
headB = headB.next
return None
上述代码的时间复杂度为 $O(l_1 + l_2)$,其中 $l_1$ 和 $l_2$ 分别为两个链表的长度。空间复杂度为 $O(1)$。