给定两相交链表,返回第一个相交节点
struct ListNode
{
int val;
ListNode *next;
ListNode(int num):val(num),next(nullptr){}
};
ListNode *getInterSectionNode(ListNode *head1,ListNode *head2)
{
//对STL熟悉的话,可以想到用set来解决该问题
if(!head1 || !head2)
return nullptr;
std::set<ListNode *> sts;
while(head1)
{
set.insert(head1);
head1 = head1->next;
}
while(head2)
{
if(sts.find(head2) != sts.end())
return head2;
head2 = head2->next;
}
return nullptr;
}
//法二:
/*
1.获取两链表的长度 len1, len2;
2.长度比较长的链表先往前走 len2-len1步 使其两者后序节点长度相等
3.两链表同时往后移动,若发现 head1 == head2 此时的节点即为相交节点
*/