138. 随机链表的复制(中)

题目

  • 深拷贝一个链表,要求新链表中的每个节点都是新创建的,并且这些节点的 random 指针都指向新链表中的相应节点。

哈希表

  • 先使用Map建立映射,然后根据映射将random和next指针指向对应的节点或者null
var copyRandomList = function (head) {
  // 如果链表为空,直接返回null
  if (!head) return head;

  let cur = head; // 当前节点指针
  const map = new Map(); // 用于存储原节点与新节点的映射关系

  // 第一次遍历,生成一个具有val属性的新链表
  while (cur) {
    // 将原节点cur作为键,创建新节点并存入map
    map.set(cur, new Node(cur.val));
    cur = cur.next; // 移动到下一个节点
  }

  // 第二次遍历,根据map映射关系,将random和next指针指向对应的节点或者null
  cur = head; // 重新将cur指向链表的头节点
  while (cur) {
    // 设置新节点的next指针
    map.get(cur).next = map.get(cur.next) || null; // 如果cur.next存在,则指向新节点,否则指向null
    // 设置新节点的random指针
    map.get(cur).random = map.get(cur.random) || null; // 如果cur.random存在,则指向新节点,否则指向null
    cur = cur.next; // 移动到下一个节点
  }

  return map.get(head); // 返回深拷贝链表的头节点
};
posted @   Frommoon  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示