力扣HOT100(42)链表-随机链表的复制

方法一:回溯 + 哈希表(面试首选,好理解、不易错)

1. 核心思路(一句话讲透)

用一个哈希表,存「原节点 → 新节点」的一一对应关系。 这样不管什么时候,只要你需要找某个原节点对应的新节点,直接查哈希表就行,完美解决 "random 指向的节点还没创建" 的问题。

2. 完整解题步骤

  1. 创建哈希表unordered_map<Node*, Node*> cachedNode,key 是原节点,value 是对应的新节点
  2. 递归终止条件 :如果当前节点是nullptr,直接返回nullptr
  3. 检查是否已复制:如果当前节点已经在哈希表中,说明已经复制过了,直接返回对应的新节点(防止重复复制)
  4. 创建新节点:复制当前节点的值,存入哈希表
  5. 递归复制指针
    • 递归复制当前节点的next节点,赋值给新节点的next
    • 递归复制当前节点的random节点,赋值给新节点的random
  6. 返回新节点
cpp 复制代码
/*
// 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:
    unordered_map<Node*,Node*> cachedNode;
    Node* copyRandomList(Node* head) {
        if(head == nullptr){
            return nullptr;
        }
        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];
    }
};
相关推荐
一只小小的芙厨17 小时前
前缀和与差分
数据结构·算法
船厂电气自动化ai大模型17 小时前
AI大模型与数学第42课:泰勒级数完整展开(神经网络近似核心)
人工智能·python·深度学习·算法·机器学习
从琳开始98917 小时前
优选算法——双指针(算法原理+力扣题)
算法·leetcode·职场和发展
从琳开始98917 小时前
优选算法——滑动窗口(概念+解题模板+LeetCode例题讲解)
算法·leetcode·职场和发展
Nil20817 小时前
leetcode 94二叉树的中序遍历
算法·leetcode·职场和发展
不会就选b17 小时前
算法日常・每日刷题
算法
一只小小的芙厨17 小时前
最短路总结
数据结构·算法
致Great18 小时前
OpenAI 又把 Codex 往前推了一步: 以后做 Agent,没必要都造一个聊天框
算法
aqiu11111119 小时前
【算法刷题】蓝桥杯/AtCoder:删除元素后的中位数问题(Symmetry / Median)
算法·蓝桥杯·排序·中位数
圣保罗的大教堂19 小时前
leetcode 1386. 安排电影院座位 中等
leetcode