LC 剑指offer 35. 复杂链表复制
请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。
输入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]]
输出:[[7,null],[13,0],[11,4],[10,2],[1,0]]
思路:
为了复制链表的next
和random
可以使用map
来实现一一对应关系
class Node{
public: int val;
Node* next;
Node* random;
Node ( int _val ) : val(_val),next(nullptr),random(nullptr){}
}
Node* Copynode( Node* head ) {
unordered_map<Node*,Node*> mp;
Node * node = head;
while( node ) {
mp[node] = new Node(node->val); // 每一个node对应创建出新的一个链表结点
node = node -> next;
}
node = head;
while( node ) {
mp[node]->next = mp[node->next];
//mp[node]为node映射的结点,所以这个映射的node结点next为mp[node->next]哈希表对应的(node的next)的结点
mp[node]->random = mp[node->random];
node = node->next;
}
return mp[head];
}