1、思路
-
若两条链表
A
与B
长度不同时,将它们连起来的长度是相同的,即A + B
的长度等于B + A
的长度; -
用双指针同时遍历两条链表,
A
链表遍历完就跳到B
链表头部开始遍历,反之亦然,当两个指针所指的节点相等时,该节点就是两条链表的交点。
2、代码
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
auto pA = headA, pB = headB;
while (pA != pB) //直到两指针相等才退出循环
{
if (pA != nullptr) pA = pA->next;
else pA = headB; //从A链表尾跳到B链表头
if (pB != nullptr) pB = pB->next;
else pB = headA; //从B链表尾跳到A链表头
}
return pA;
}
};