另一种方法(C++)

复杂链表的复制

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

/*
struct RandomListNode {
int label;
struct RandomListNode next, *random;
RandomListNode(int x) :
label(x), next(NULL), random(NULL) {
}
};
*/
class Solution {
public:
RandomListNode
Clone(RandomListNode* pHead)
{
if(!pHead)//判断头指针为空
return pHead;
RandomListNode* res = new RandomListNode(-1);//创建新头指针

    RandomListNode* ph = pHead;
    map<RandomListNode*,int> m1;//记录旧链表地址映射关系
    map<int,RandomListNode*> m2;//记录新链表地址映射关系
    RandomListNode* cur;
    RandomListNode* head = res;
    int i = 0;
    while(pHead){//复制主体链表
        cur = new RandomListNode(-1);
        cur->label = pHead->label;
        m1[pHead]=i;
        m2[i]=cur;
        ++i;
        head->next=cur;
        head = head->next;
        pHead = pHead->next;
    }
    head->next = nullptr;
    for(int j=0;j<i;++j){//添加随机指针部分
        if(!ph->random)
            m2[j]->random=nullptr;
        else{
            int index = m1.find(ph->random)->second;
            m2[j]->random=m2[index];
        }
        ph=ph->next;
    }
    return res->next;
}

};

全部评论

相关推荐

ResourceUt...:楼主有自己的垃圾箱,公司也有自己的人才库
点赞 评论 收藏
分享
冷花幽露:大概率是了,京东面试就是这样。我上周一面也是20多分钟,面试官问的很刁钻的问题也答上来了,面完过了几天还是没推进,泡池子,昨天一看挂了。如果一面完第2天没有收到2面邀请,基本上不用抱希望了。如果你的bg是985,面试流程也是和我们一样,20多分钟,唯一区别就是面完他们会很快收到二面邮件,而不像我们泡池子然后挂掉
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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