题解 | #两个链表的第一个公共结点#

两个链表的第一个公共结点

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;
    }
};
全部评论

相关推荐

牛客840099999号:没见过这样的大厂,至少头部的肯定没有
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务