题解 | #两个链表的第一个公共结点#
两个链表的第一个公共结点
http://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46
/* 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; } };