剑指 Offer 35. 复杂链表的复制 - 力扣(LeetCode)
总结:今日这道题自己使用暴力方法结果是超时了,看完题解后觉得实在是太妙了!!!利用哈希表与递归(答案中说是回溯,个人理解是递归),利用哈希表记录已经创建了的节点,如果没有找到就直接新创建节点,找到了就直接返回哈希表记录的值,而哈希表的键值就是原来链表中的节点,哈希表中的键值和值值非常对应,就是两个不同链表中的同一节点。
代码:
cpp
class Solution {
public:
unordered_map<Node*,Node*> cachedNode;
Node* copyRandomList(Node* head) {
if(head == nullptr)
return head;
if(!cachedNode.count(head))
{
Node* headNew = new Node(head->val);
cachedNode[head] = headNew;
headNew->next = copyRandomList(head->next);
headNew->random = copyRandomList(head->random);
}
return cachedNode[head];
}
};
//太妙了!!!
//记得反复观看