📅  最后修改于: 2023-12-03 15:40:01.514000             🧑  作者: Mango
给定两个单链表,请你找出它们的第一个公共节点。
如下面的两个链表:
A: a1 → a2
↘
c1 → c2 → c3
↗
B: b1 → b2 → b3
在节点 c1 开始相交。
本题可以使用双指针法(双指针一定要分开走到尾),分别从两个链表的头部开始,不断往后遍历,当其中一个链表遍历到结尾时,将其指针指向另一个链表的头部,两个指针便相当于同时从两个链表的尾部往前遍历,直到相遇。
代码如下:
class Solution:
def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode:
if not headA or not headB:
return None
pA, pB = headA, headB
while pA != pB:
pA = pA.next if pA else headB
pB = pB.next if pB else headA
return pA
时间复杂度:O(m + n),其中 m 和 n 分别为两个链表的长度。
空间复杂度:O(1)。
本题考察了链表的知识,并且双指针法是链表问题常用的解法之一,掌握此方法对其他链表问题也是有好处的。