LeetCode 138 | 复制带随机指针的链表

LeetCode 138 | 复制带随机指针的链表

题目

在这里插入图片描述
在这里插入图片描述

题解

  1. 用map给新申请的结点和原结点建立意义对应的关系,之后一次遍历map通过first(原结点)方便对second(新建的结点)修改。
/*
// Definition for a Node.
class Node {
public:
    int val;
    Node* next;
    Node* random;
    
    Node(int _val) {
        val = _val;
        next = NULL;
        random = NULL;
    }
};
*/

class Solution {
public:
    Node* copyRandomList(Node* head) {
        if(!head)return nullptr;
        auto  p=head;
		//建立map,建立对应关系
        map<Node*,Node*> mp;
        while(p){
           mp.insert(make_pair(p,new Node(p->val)));
           p=p->next;
        }
		//遍历map修改second的两个域指针
       for(auto &c:mp){
       		//新结点的next域等于该pair的原结点对应的next指向的对象为索引的对象。
           c.second->next=mp[c.first->next];
           //同上思想
           c.second->random=mp[c.first->random];
       }
       return mp[head];  
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值