复杂链表的复制-剑指Offer35-java

news/2024/5/5 3:06:40/文章来源:https://blog.csdn.net/LJH132465/article/details/129803008

一、题目描述

请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。

示例 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]]
示例 4:

输入:head = []
输出:[]
解释:给定的链表为空(空指针),因此返回 null。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/fu-za-lian-biao-de-fu-zhi-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、运行结果

三、解题思路

复制复杂链表的难点在于random指针的复制,这里使用一个哈希表来保存每一个院链表中的结点与对应的新链表中的结点之间的对应关系,在第一次遍历原链表进行复制的时候,先不处理每个新链表结点的random指针,只是保存新旧结点之间的对应关系。

简单对原链表复制完成之后(没有处理random指针),所有的结点都已经复制完成,在重头遍历一次链表,处理random指针,而random指针可以根据先前保存的对应关系进行设置,根据原链表中每个结点的random指针设置新链表中每个结点的random指针。

四、AC代码

/*
// Definition for a Node.
class Node {int val;Node next;Node random;public Node(int val) {this.val = val;this.next = null;this.random = null;}
}
*/
class Solution {public Node copyRandomList(Node head) {Node p = head;           // 工作指针,遍历原链表Map<Node, Node> map = new HashMap<>(); //原结点和新结点之间的映射关系Node dummy = new Node(-1);if(head == null) return null;Node tmpNode = new Node(p.val);        //指向新构建的结点dummy.next = tmpNode;   Node rear = tmpNode;     //指向新构建链表的末尾结点map.put(head, tmpNode);while(p.next != null){   //先复制每个结点和next指针,先不管random指针Node pnext = p.next;tmpNode = new Node(pnext.val);rear.next = tmpNode; // 指针后移rear = tmpNode;p = pnext;map.put(pnext, tmpNode); // 保存映射关系}p = head;          // 再重头到尾扫描一遍链表tmpNode = dummy.next;while(p != null){  //构建random指针tmpNode.random = map.get(p.random);p = p.next;tmpNode = tmpNode.next;}return dummy.next;}
}

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChartGPT多重插补法 填充缺失点

问题描述已知时间戳与对应的值&#xff0c;需要根据时间戳找到缺失的点&#xff0c;然后进行值的填充。例如&#xff1a;源码<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-math3 --><dependency><groupId>org.apache.commons</gr…

flink执行任务运行10h以后挂掉并且报错

问题描述flink运行jar包任务&#xff0c;运行几个小时或者1天以后&#xff0c;任务就会挂掉&#xff01;&#xff01;&#xff01;第一个错误是2023-02-01 23:43:08,083 INFO org.apache.flink.runtime.executiongraph.ExecutionGraph [] - Window(TumblingEventTimeWindows(60…

【Unity】创建一个自己的AR安卓程序

目录1 环境配置2 下载官方提供的AR Starter工程3 AR Starter工程中的包以及打包设置3.1 Package Manager3.2 Player Settings4 创建一个新的AR场景5 AR场景中的物体6 在unity中运行AR场景7 在AR场景的基础上添加自己的想法7.1 修改Cube的旋转速度/方向7.2 将Cube替换为其他物体…

今年面试好激烈!

金三银四过去一半&#xff0c;市场火热&#xff0c;但是大家就业压力却没有缓解多少。 很多粉丝后台留言&#xff0c;Java程序员面临的竞争太激烈了…… 我自己也有实感&#xff0c;多年身处一线互联网公司&#xff0c;虽没有直面过求职跳槽的残酷&#xff0c;但经常担任技术面…

【开发实践】在线考试系统(一) 生成错题知识点的思维导图

一、需求分析设计 笔者开发了一个在线考试系统&#xff0c;导师提出一个需求&#xff1a;添加对考试错题相关知识点的总结。 在question表中关联知识点的编号&#xff0c;题目可能关联多个知识点。这里笔者的设计是&#xff0c;只关联一个知识点&#xff0c;便于维护。 下面是知…

【python实操】马上毕业了,你还不懂什么是守护线程、线程、进程?(附12306抢票程序-源代码)

作者&#xff1a;20岁爱吃必胜客&#xff08;坤制作人&#xff09;&#xff0c;近十年开发经验, 跨域学习者&#xff0c;目前于海外某世界知名高校就读计算机相关专业。荣誉&#xff1a;阿里云博客专家认证、腾讯开发者社区优质创作者&#xff0c;在CTF省赛校赛多次取得好成绩。…

预训练语言模型(GPT,BERT)

文章目录GPT 模型预训练语言模型模型和学习BERT 模型去噪自编码器模型和学习模型特点References在自然语言处理中事先使用大规模语料学习基于 Transformer 等的语言模型&#xff0c;之后用于各种任务的学习和预测&#xff0c;称这种模型为预训练语言模型。代表性的模型有 BERT …

LCX端口转发之远程桌面端口双重映射多主机转发

1.下载LCX端口转发工具源码及程序: git clone https://github.com/UndefinedIdentifier/LCX lcx1 2.复制到目标机: winxp win2003 win7

上海亚商投顾:创业板指低开高走ChatGPT概念股再爆发

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。市场情绪大小指数今日走势分化&#xff0c;沪指盘中一度跌超1%&#xff0c;午后震荡回升跌幅收窄&#xff0c;创业板指则低开…

iOS多线程——GCD学习总结

文章目录多线程编程进程线程线程与进程的关系CPU核GCD简介为什么我们要使用GCD任务同步执行&#xff08;sync&#xff09;&#xff1a;异步执行&#xff08;async&#xff09;&#xff1a;队列&#xff08;Dispatch Queue&#xff09;串行队列&#xff08;Serial Dispatch Queu…

Tensor高阶用法:快速掌握Tensor切分、变形等方法

要想在实际的应用中更灵活地用好 Tensor&#xff0c;Tensor 的连接、切分等操作也是必不可少的。我们就通过一些例子和图片来一块学习下。虽然这几个操作比较有难度&#xff0c;但只要耐心分析&#xff0c;然后上手练习&#xff0c;还是可以拿下的。 Tensor 的连接操作 在项目…

SQL语法基础

简介 SQL (Structured Query Language) 是具有数据操纵和数据定义等多种功能的数据库语言&#xff0c;这种语言具有交互性特点&#xff0c;能为用户提供极大的便利&#xff0c;数据库管理系统应充分利用SQL语言提高计算机应用系统的工作质量与效率。 以下介绍postgresql语法&am…

ChatGPT的多种用法(持续更新中。。。)

指南 写小说 “写一本拥有出人意料结局的推理小说。” “写一个让读者参与其中的交互小说。” “为孩子们写一本激励他们勇敢面对挑战的小说。” “编写一个有关科技创新的未来世界的小说。” “创造一个让读者感到沉浸其中的幻想故事。” 充当 Linux 终端 我想让你充当…

数据结构绪论

​ 文章目录1 知识结构2 数据结构的基本概念2.1 算法的基本概念2.2 数据结构三要素2.2.1 数据的逻辑结构线性结构非线性结构2.2.2 数据的存储&#xff08;物理&#xff09;结构数据结构的四种存储结构2.2.3 数据的运算3 算法的基本概念3.1 基本概念3.1.1 算法&#xff08;Algor…

MIPI D-PHYv2.5笔记(5) -- 不同的PHY配置方式

声明&#xff1a;作者是做嵌入式软件开发的&#xff0c;并非专业的硬件设计人员&#xff0c;笔记内容根据自己的经验和对协议的理解输出&#xff0c;肯定存在有些理解和翻译不到位的地方&#xff0c;有疑问请参考原始规范看 规范5.7章节列举了一些常见的PHY配置&#xff0c;但实…

jsp+ssm在线考试系统+错题集Spring+SpringMVC+Mybatis编写实现的项目

本系统设计了三种角色&#xff1a;管理员&#xff0c;用户和教师。通过此系统&#xff0c;教师可以在线课程信息、考试内容、在线考试、考试管理进行发布。以及在线对试卷进行批阅和批量删除&#xff0c;用户可以对自己任课老师布置的课程信息进行下载&#xff0c;对老师已经批…

TryHackMe-Willow(boot2root)

Willow 柳树下有什么&#xff1f; 端口扫描 循例 nmap NFS枚举 直接挂载进来 存在一个rsa_key 暂时不知道有啥用&#xff0c;先去看80 Web枚举 进入80 看起来像是16进制&#xff0c;使用xxd转换 得到了用户名和rsa密文 在线计算器解密一下得到ssh的私钥 需要密码 ssh2johnj…

现在转行IT还有机会吗?

其实大部分所谓的机会都是建立在我们准备好的基础上的&#xff0c;因为大多数的企业并不会启用一个零基础毫无经验&#xff0c;或者没有企业所需要特质的人员。作为普通人而言&#xff0c;只有当你准备好之后&#xff0c;你才会看到机会&#xff0c;在这之前&#xff0c;你只会…

Web自动化测试入门

1.Web自动化测试的价值&#xff08;为什么要做web自动化测试&#xff09; 我们可以使用脚本语言代替人来进行测试 2.Web自动化测试相关技术&#xff1a; Selenium:支持多语言&#xff0c;行业内最火最主流Pytest/JUnit5:最好用最全面的单元测试框架Allure:测试报告3.Web自动化…

NotionAI - 文档领域的ChatGPT,一款 AI 加持的在线文档编辑和管理工具

简介 NotionAI - 文档领域的ChatGPT&#xff0c;一款 AI 加持的在线文档编辑和管理工具 作为国际领先的在线文档编辑和管理工具&#xff0c;Notion受到了广大用户的欢迎&#xff0c;尤其是程序员们。它不仅支持笔记、编码等基本的在线文档功能&#xff0c;还支持团队协作、项…