怎么制作网站弹出广告,禅城网站设计,江西省网站开发,wordpress摘要 省略号给你一个长度为 n 的链表#xff0c;每个节点包含一个额外增加的随机指针 random #xff0c;该指针可以指向链表中的任何节点或空节点。
构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成#xff0c;其中每个新节点的值都设为其对应的原节点的值。新节点的 n…给你一个长度为 n 的链表每个节点包含一个额外增加的随机指针 random 该指针可以指向链表中的任何节点或空节点。
构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random 指针也都应指向复制链表中的新节点并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点 。
例如如果原链表中有 X 和 Y 两个节点其中 X.random -- Y 。那么在复制链表中对应的两个节点 x 和 y 同样有 x.random -- y 。
返回复制链表的头节点。
用一个由 n 个节点组成的链表来表示输入/输出中的链表。每个节点用一个 [val, random_index] 表示
val一个表示 Node.val 的整数。
random_index随机指针指向的节点索引范围从 0 到 n-1如果不指向任何节点则为 null 。你的代码 只 接受原链表的头节点 head 作为传入参数。 输入head [[7,null],[13,0],[11,4],[10,2],[1,0]] 输出[[7,null],[13,0],[11,4],[10,2],[1,0]] 输入head [[1,1],[2,1]] 输出[[1,1],[2,1]] 输入head [[3,null],[3,0],[3,null]] 输出[[3,null],[3,0],[3,null]]
示例 4
输入head [] 输出[] 解释给定的链表为空空指针因此返回 null。
提示
0 n 1000
-10000 Node.val 10000
Node.random 为空null或指向链表中的节点。代码如下:
/*
// 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(headnullptr){return nullptr;}unordered_mapNode*,Node*map;Node *newhead new Node (head-val);map[head] newhead;Node *pre newhead;for (auto it head-next;it!nullptr;it it-next){Node *cur new Node(it-val);map[it] cur;pre-next cur;pre cur;}for (auto it head;it!nullptr;it it-next){map[it]-random map[it-random];}return newhead;}
};