- 分别求两个链表的最大长度
- 将较长的链表移动 两链表相差的数目个 节点
- 同时移动两个链表,当找到相同节点时,即找到了链表相交的节点
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB)
{
ListNode* cur1 = headA;
ListNode* cur2 = headB;
int len1 = 0, len2 = 0;
while (cur1!=nullptr)
{
cur1 = cur1->next;
++len1;
}
while (cur2 != nullptr)
{
cur2 = cur2->next;
++len2;
}
cur1 = headA;
cur2 = headB;
if (len1 < len2)
{
swap(len2, len1);
swap(cur2, cur1);
}
int gap = len1 - len2;
while (gap--)
{
cur1 = cur1->next;
}
while (cur1 != nullptr)
{
if (cur1 == cur2)
{
return cur1;
}
cur1 = cur1->next;
cur2 = cur2->next;
}
return nullptr;
}
};