题解 | #复杂链表的复制# JZ35

复杂链表的复制

http://www.nowcoder.com/practice/f836b2c43afc4b35ad6adc41ec941dba

思路:先沿着next指针把有序部分拷贝下来,然后每个结点分别拷贝random部分。建立一个map,每次拷贝的时候,从原来部分读取一个地址,就去map查找对应新链表的地址是什么。要充分利用next有序这一条件。

class Solution {
public:
    RandomListNode* Clone(RandomListNode* pHead) {
        RandomListNode *newHead=nullptr,*p0=nullptr,*p1=nullptr,*newP=nullptr,*r0=nullptr,*r1=nullptr;
        map<RandomListNode*,RandomListNode*> locMap;//用来查找旧链表里面的地址对应新链表的什么地址
        for(p0=pHead;p0!=nullptr;p0=p0->next){
            newP=new RandomListNode(p0->label);
            locMap[p0]=newP;//存入map
            if(newHead==nullptr){
                newHead=newP;//newHead是新链表的头
                p1=newP;//p1是新链表的尾,下面每次操作要取p1=p1->next
            }
            else{
                p1->next=newP;
                p1=p1->next;
            }
        }
        p1=newHead;
        p0=pHead;
        while(p0!=nullptr){
            r0=p0->random;//这部分开始复制random
            r1=locMap[r0];//查表
            p1->random=r1;
            p0=p0->next;
            p1=p1->next;
        }
        return newHead;
    }
};
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-15 17:46
暑期就挂了,秋招还有机会吗
大聪明777:研发提前批,14号刚开的,官网上面的配图上有写。提前批没过的话,秋招还可以投,不过前面的笔试/面试记录会被保留,供秋招参考
26届校招投递进展
点赞 评论 收藏
分享
Hakasee:我的简历和你的基本一样,上周去了上海,boss投了三百家, 三家线下面试 第一家没有做题,全是八股和项目,因为第一次面试不怎么熟练,挂了 第二家,给你几个题目(①css垂直居中文字,字体每两秒闪烁一下以及点击弹窗,②给你一个链接,实现可视化地图,③然后是八股,图片性能优化,以及对图片app有什么想法),45分钟内做完,然后老板面试) 第三家特别偏僻,有点阴森,到了之后让了一个工位给我,有四个题目,①格式化时间 年月日当前时间星期几② 正则表达式提取新闻文字,③在文本域输入文字生成选择题以及选项④生成商品排版还是什么来着 三家都是不超过50人的小公司 两家线上牛客笔试(卡伦特,七牛云,但是笔试不仅要考前端,还要考后端,算法,甚至数学题 我的建议是如果只做了这两个vue项目且不怎么熟练的情况下,先沉淀沉淀,把react学了,上海好的公司基本都是react查看图片
点赞 评论 收藏
分享
风中翠竹:真的真的真的没有kpi。。。面试官是没有任何kpi的,捞是真的想试试看这个行不行,碰碰运气,或者是面试官比较闲现在,没事捞个人看看。kpi算HR那边,但是只有你入职了,kpi才作数,面试是没有的。
双非有机会进大厂吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务