一、题目
二、思路
从这个实例中我们可以看出,A链中包含1,B链中也包含1,他们仅仅是值相同而不像一个节点。而从8开始他们就开始是一个节点。
解题思路:这道题目让求两个链表相交的节点, 利用双指针法O(m+n) 就可以遍历完成
这道题目的思想是让 a, b 指针都走一遍 headA, headB 两个链表, a, b 相遇的地方就是两个链表相交的地方.
a 指向 headA, 一步一步往 next 走, 走到结尾 null 时, 跳到headB 继续往后遍历;
b 指针跟 a 一样的, 只不过先遍历 headB, 到结尾了再跳到 headA
为什么 a, b 会在交点相遇;
假设headA, headB是有交点的, 他们整个移动的路径像一个 8 字. 我觉得这个有点像莫比乌斯环~, 两个指针的起始位置虽然不一样, 但是大家的走的步伐是一致的, 而且朝着相交的点在移动, 于是可以相遇. 画一个图来理解一下可能更加清晰.
三、代码
四、时间复杂度和空间复杂度
时间复杂度:首先,代码会检查两个链表是否为空。这是一个 O(1) 操作。
然后,它使用两个指针 pa 和 pb 分别从链表 headA 和 headB 开始遍历链表,直到找到交点或者同时到达链表末尾。在遍历过程中,它会不断地将 pa 和 pb 移动到下一个节点,直到它们相遇,或者同时到达链表末尾。在最坏情况下,这需要遍历整个链表,所以时间复杂度是 O(m + n)。
空间复杂度:代码只使用了两个指针 pa 和 pb 以及一些常量额外空间来存储其他变量,因此空间复杂度是 O(1),与输入链表的大小无关。