首页 > 其他分享 >138. 随机链表的复制(中)

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

时间:2025-01-06 11:16:48浏览次数:8  
标签:map cur random next 链表 随机 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); // 返回深拷贝链表的头节点
};

标签:map,cur,random,next,链表,随机,138,节点
From: https://www.cnblogs.com/lushuang55/p/18654634

相关文章

  • 1384. 按年度列出销售总额 - 力扣(LeetCode)
    1384.按年度列出销售总额-力扣(LeetCode)目标输入Sales表:product_idperiod_startperiod_endaverage_daily_sales12019/1/252019/2/2810022018/12/12020/1/11032019/12/12020/1/311Product表:product_idproduct_name1LCPhone2LCT-Shirt3LCKeychain输出输出product......
  • 25考研王道数据机构课后习题-----顺序表链表部分
    文章目录1.顺序表题目2.链表相关题目3.我的个人总结声明:以下内容来自于B站知名up主白话拆解数据结构,望获悉;1.顺序表题目下面的这个说的是:下面的哪一个是组成我们的顺序表的有限序列,这个应该是数据元素,n个字符组成的这个内容我们称之为字符,数据项表示的是我们的这......
  • 大一计算机的自学总结:单双链表的反转
    前言为了减少单个文件里的代码量(懒),于是将能用到的函数都写进一个.h文件里了。其中大部分函数都在我“初见链表”的文章里写过了。#include<bits/stdc++.h>usingnamespacestd;typedefstructnode{ intvalue; structnode*next;}Node;typedefstructnodeD{ ......
  • 25. K 个一组翻转链表(难)
    目录题目法一、模拟--迭代法二、递归题目给你链表的头节点head,每k个节点一组进行翻转,请你返回修改后的链表。k是一个正整数,它的值小于或等于链表的长度。如果节点总数不是k的整数倍,那么请将最后剩余的节点保持原有顺序。你不能只是单纯的改变节点内部的值,而是需要实际......
  • 创作错误(每次重新启动丢失原链表)
    #include<stdio.h>#include<conio.h>#include<windows.h>#include<stdlib.h>#include<string.h>#include<time.h>voidgotoxy(intx,inty){  COORDpos={x,y};  HANDLEhOut=GetStdHandle(STD_OUTPUT_HANDLE);......
  • OJ随机链表的复制题目分析
    题目内容:138.随机链表的复制-力扣(LeetCode)分析: 这道题目,第一眼感觉非常乱,这是正常的,但是我们经过仔细分析示例明白后,其实也并不是那么难。现在让我们一起来分析分析吧!1.题目要求的是链表的复制,那么我们得想我们该怎么做,才能很好地进行下去呢?2.是直接把原链表一个一个......
  • 【概率论与数理统计】第一章 随机事件与概率(1)
    1随机事件1.1随机现象自然界和社会中存在两类现象:确定性现象(一定条件实现时,一定发生;可预测。)随机性现象(一定条件实现时,结果无法断言。)随机现象的研究是建立在大量重复试验或观察之上的。人们发现随机现象的结果出现某些规律性,这种规律性就是所谓的统计规律性。《概率......
  • [数据结构学习笔记4] 链表
    链表(LinkedLists)和数组类似,链表也是用来存放一组数据。和数组不一样的是,链表存储不需要连续的内存位置,一个链表由很多节点组成,节点与节点间通过一个next指针关联。图示:NodeValue/DataNext 链表操作:查找一个值:通过链表的next指针一直往下跳直到:1.找到了想......
  • 160链表相交
    哈希肯定是能解的,就想着有没有其他方法。最开始的思路是翻转链表,然后再来找相交结点,但是题目要求不能改链表结构。官方题解的第二种方法确实巧妙,如果有相交结点的话最多通过两次遍历就一定能找到,因此。在分析中,其实我们也可以把两个不相交的链表看做相交,但是相交结点为nullptr代......
  • 确定信号与随机信号
    确定信号定义:确定信号是指对于任意给定的时刻t,信号的取值是确定的,能够用一个确定的时间函数来描述。例如\(x(t)=3\cos(2\pit)\),对于每一个t值,都可以准确地计算出x(t)的值。特点:可预测性。一旦确定了信号的表达式,就可以预测在任何时间点上信号的值。重复性。在某些情......