题目
分析
哈希表
-
使用一个哈希表,存放对应的新创建的链表和老链表的对应关系,每一个节点都相互对应
-
-
先不管random和next,赋值其他部分直接构建一个链表
-
在哈希表中,将新链表的next构建起来
-
根据head中的random位置来给新链表的位置赋值
- head和新链表位置是相对于的,head的random位置所对应的节点位置也就是新链表对应节点的random位置
代码
class Node {
public:
int val;
Node* next;
Node* random;
Node(int _val) {
val = _val;
next = nullptr;
random = nullptr;
}
};
class Solution {
public:
Node* copyRandomList(Node* head)
{
if (!head)
{
return nullptr;
}
//哈希表
unordered_map<Node*,Node*> maps;
Node* cur = head;
//构建哈希表,每一个head里面的和新创建的相对应
while (cur)
{
Node* n1 = new Node(cur->val);
maps[cur] = n1;
cur = cur->next;
}
cur = head;
while (cur)
{
maps[cur]->next = maps[cur->next];//新链表的next
//根据ead里面的random对应关系来给新链表的random赋值
maps[cur]->random = maps[cur->random];
cur = cur->next;
}
//返回链表头节点
return maps[head];
}
};