/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
// 利用set保存数据的唯一性判断重复位置,插入失败时即指向第一个重复元素
set<ListNode*> visited;
ListNode* p1 = pHead1;
ListNode* p2 = pHead2;
while(p1 != nullptr || p2 != nullptr){
if(p1 != nullptr){
if(visited.insert(p1).second){
// p1插入成功
p1 = p1->next;
}
else{
// p1插入失败,说明集合中有相同元素
return p1;
}
}
if(p2 != nullptr){
if(visited.insert(p2).second){
// p2插入成功
p2 = p2->next;
}
else{
// p2插入失败,说明集合中有相同元素
return p2;
}
}
}
return nullptr;
}
};