链表--随机链表复制

news2024/9/20 20:32:58

给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。

构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点 

例如,如果原链表中有 X 和 Y 两个节点,其中 X.random --> Y 。那么在复制链表中对应的两个节点 x 和 y ,同样有 x.random --> y 。

返回复制链表的头节点。

用一个由 n 个节点组成的链表来表示输入/输出中的链表。每个节点用一个 [val, random_index] 表示:

  • val:一个表示 Node.val 的整数。
  • random_index:随机指针指向的节点索引(范围从 0 到 n-1);如果不指向任何节点,则为  null 。

你的代码  接受原链表的头节点 head 作为传入参数。

示例 1:

输入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]]
输出:[[7,null],[13,0],[11,4],[10,2],[1,0]]

示例 2:

输入:head = [[1,1],[2,1]]
输出:[[1,1],[2,1]]

示例 3:

输入:head = [[3,null],[3,0],[3,null]]
输出:[[3,null],[3,0],[3,null]]
/*
// 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*> cacheNode;
    Node* copyRandomList(Node* head) 
    {
        
        if(head==nullptr)
        {
            return nullptr;
        }
        if(!cacheNode.count(head))
        {
            Node* headNew=new Node(head->val);
            cacheNode[head]=headNew;
            headNew->next=copyRandomList(head->next);
            headNew->random=copyRandomList(head->random);
        }
        return cacheNode[head];
    }
};

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2072526.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

太阳方向角/高度角/赤纬角/太阳时角/真平太阳时差/理论计算方法(matlab)

1. 理论学习 方向角&#xff0c;高度角计算公式 如图&#xff0c;直观地描述了方位角(圆盘上红色夹角)与高度角(黄色线与圆盘的夹角) 赤纬角计算公式 地球赤道平面与太阳和地球中心的连线之间的夹角 如图所示&#xff0c;23度那个. 时角计算公式 太阳时角是指日面中心的时角…

博客园OpenApi管理平台

简介 博客园&#xff08;Cnblogs&#xff09;提供了OpenAPI服务&#xff0c;允许开发者通过API来获取博客园中的数据。使用这个API&#xff0c;可以实现从博客园抓取文章、评论等信息的功能&#xff0c;这对于想要集成博客园内容到自己网站或应用的开发者来说是非常有用的。 …

【hot100篇-python刷题记录】【二叉树的最大深度】

R6-二叉树篇 最简单的方法&#xff1a; 循环len(root)次&#xff0c;每次循环执行以下操作&#xff1a; 循环pow(2,i)次&#xff0c;每次都root.pop(0) 如果为空&#xff0c;立即退出&#xff0c;返回i1 class Solution:def maxDepth(self, root: Optional[TreeNode]) ->…

C语言基础(十七)

C语言中的结构体&#xff08;Struct&#xff09;是一种用户自定义的数据类型&#xff0c;允许将不同类型的数据项组合成一个单一的类型&#xff1a; 测试代码1&#xff1a; #include "date.h" #include <stdio.h> #include <string.h> // 定义结构…

【数据分享】1999—2022年地级市市政公用事业和邮政、电信业发展情况相关指标(Shp/Excel格式)

在之前的文章中&#xff0c;我们分享过基于2000-2023年《中国城市统计年鉴》整理的1999-2022年地级市的人口相关数据、各类用地面积数据、污染物排放和环境治理相关数据、房地产投资情况和商品房销售面积、社会消费品零售总额和年末金融机构存贷款余额、一般公共预算收支状况、…

[NeurIPS 2024] Self-Refine: Iterative Refinement with Self-Feedback

Contents TL;DRReferences TL;DR 通过让 LLM 生成 feedback 不断 refine 自身的回答&#xff0c;可以提升回答效果&#xff0c;但也会带来不可忽视的推理开销 References Madaan, Aman, et al. “Self-refine: Iterative refinement with self-feedback.” Advances in Neura…

Openssl Infinite Loop 漏洞(CVE-2022-0778)

Openssl Infinite Loop 漏洞&#xff08;CVE-2022-0778&#xff09; 1. 漏洞详情 在该漏洞中由于证书解析时使用的 BN_mod_sqrt() 函数存在一个错误&#xff0c;它会导致在非质数的情况下永远循环。可通过生成包含无效的显式曲线参数的证书来触发无限循环。由于证书解析是在验…

word技巧:如何在Word中轻松实现文档内容的左右分栏排版

你是否曾遇到过需要让Word文档的内容更加整洁、易于阅读&#xff0c;却苦于不知如何将其巧妙分为左右两栏的困扰&#xff1f;别担心&#xff0c;今天我们就来详细解析这一实用技巧&#xff0c;让你的文档排版瞬间提升一个档次&#xff01; 方法如下&#xff1a; 首先&#xff0…

uniapp h5手机如何打开本地跑的前端项目进行本地调试

本地调试使用 vConsole是一个轻量级的移动端调试工具&#xff0c;可以在iOS设备上直接调试Uniapp H5应用。下面是具体的步骤&#xff1a; 在Uniapp项目中安装vConsole依赖&#xff1a;npm install vconsole。 在项目的main.js文件中引入vConsole库&#xff1a;import VConso…

python实现简单中文词元化、词典构造、时序数据集封装等

文章目录 简述代码词元化词典构造时序数据生成data.TensorDataset生成 简述 中文词元化、删除非中文字符、构建索引词典&#xff0c;以便于为训练提供向量化数据。 待处理文本&#xff0c;以朱自清的《背影》为例&#xff0c;图中是给句子手动换行了&#xff0c;不换也是没问…

【网络安全】服务基础第一阶段——第二节:网络测试与用户

一、Windows网络测试工具 CMD&#xff08;命令提示符&#xff09;中&#xff0c;ping和tracert是两个非常有用的网络诊断工具 1.1.ping命令 ping命令是Windows和其他操作系统中用于测试主机之间网络连接是否可达的基本命令行工具。它通过发送ICMP&#xff08;Internet Contr…

LLM agentic模式之规划能力(planning)

文章目录 任务分解分解优先方法交替分解方法 多计划选择外部规划器辅助规划反思和改进记忆增强规划评估 2024年2月的综述《 Understanding the planning of LLM agents: A survey》提供了基于LLM的的agent的规划(planning)能力的系统视角&#xff0c;总结了近年来提高规划能力…

如何申请 Midjourney API ,看这篇文章就够了

Midjourney Imagine API 的申请与应用 Midjourney&#xff0c;这一杰出的 AI 绘图工具&#xff0c;凭借输入几个关键字&#xff0c;便能在短短一两分钟内生成极为精美的图像&#xff0c;展现出令人惊叹的创作能力。它以独特的绘画技术在行业中独树一帜&#xff0c;现今在各个领…

墨刀基础篇(一) :6.常用组件(动态组件)

一&#xff1a;动态组件 动态组件是除了文件和矩形之外最重要的一个组件。文本和矩形是一切组件的基础&#xff0c;而动态组件是复杂组件的根本。动态组件就是可以拥有多个状态&#xff0c;每个状态可以放不同的内容&#xff0c;每个状态之间可以互相切换&#xff0c;每个状态…

springboot系列--springboot前置知识

一、spring相关知识 一、spring能干什么 二、spring生态 spring生态覆盖了&#xff1a;web开发、数据访问、安全控制、分布式、消息服务、移动开发、批处理等等。 官网链接&#xff1a;Spring | Home 二、springboot相关知识 一、springboot作用 Spring Boot makes it easy …

Ansys Rocky在电池制造行业应用

Ansys Rocky在电池制造行业应用 对于电池电极制造的理解 干湿混合应用 砑光应用 微尺度电极干燥应用 更多应用 材料生产 电极和电池生产

prolog 基础 - 关系和属性

首先进入环境&#xff1b; 看一下一开始的提示符是 ?- &#xff0c;现在可以用write语句输出一些东西&#xff1b; 根据资料&#xff0c;在prolog中&#xff0c; 两个对象之间的关系&#xff0c;使用括号表示。比如&#xff0c;jack的朋友是peter&#xff0c;写成friend(ja…

论文笔记:Large Language Models are Zero-Shot Next LocationPredictors

1 intro 下一个地点预测&#xff08;NL&#xff09;包括基于个体历史访问位置来预测其未来的位置。 NL对于应对各种社会挑战至关重要&#xff0c;包括交通管理和优化、疾病传播控制以及灾害响应管理NL 问题已经通过使用马尔可夫模型、基于模式的方法以及最近的深度学习&#x…

突破传统,GCOM80-2NET的创新性边缘计算方式

GCOM80-2NET边缘计算网关&#xff0c;突破传统Modbus协议仅能进行数据读采的限制&#xff0c;直接在设备终端进行复杂的数据点运算&#xff0c;减少冗余数据传输&#xff0c;释放软件人员针对不同Modbus设备协议解析的时间。 GCOM80-2NET&#xff0c;是ZLG致远电子推出的一款高…

OpManager Plus简单说明以及在Linux下的安装

目录 1 简介2 安装2.1 Linux下安装 1 简介 OpManager Plus 属于ManageEngine&#xff0c;是一款商业软件。 ManageEngine OpManager是一款全面的网络监视软件&#xff0c;可为网络管理员提供集成控制台&#xff0c;用于管理路由器&#xff0c;防火墙&#xff0c;服务器&#x…