剑指 Offer 52. 两个链表的第一个公共节点

#include<iostream>
#include<unordered_map>
using namespace std;
struct ListNode
{
    int val;
    ListNode* next;
    /* data */
};

// class Solution {
// public:
//     ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
//         auto m=headA;
//         auto n=headB;
//         while(m!=n&&(m||n))
//         {
//             if(m==NULL)
//             {
//                 m=headB;
//             }
//             else
//             {
//                 m=m->next;
//             }
//             if(n==NULL)
//             {
//                 n=headA;
//             }
//             else
//             {
//                 n=n->next;
//             }
//         }
//         return n;
//     }
// };//奇妙的解法  关于公共遍历的特点
class Solution {
    unordered_map<ListNode*,int>p;
public:
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
        while(headA!=NULL)
        {
            p[headA]++;
            headA=headA->next;
        }
        while(headB!=NULL)
        {
            if(p[headB]==0)
            {
                headB=headB->next;
            }
            else
            {
                return headB;
            }
        }
        return NULL;
    }
};
//草 这怎么能没想到  只会双层遍历  这个遍历用来节省了循环嵌套
 //本来是for for嵌套  现在变成了 for +for检查map
int main()
{

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值