永康公司网站建设云南医疗seo整站优化
2026/5/13 17:14:48 网站建设 项目流程
永康公司网站建设,云南医疗seo整站优化,网亿(深圳)信息科技有限公司,全国企业信息公示系统官网题目难度: 中等 原题链接 今天继续更新 Leetcode 的剑指 Offer#xff08;专项突击版#xff09;系列, 大家在公众号 算法精选 里回复 剑指offer2 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 请实现 copyRandomList 函数#xff0c;复制一个复杂链表。在复…题目难度: 中等原题链接今天继续更新 Leetcode 的剑指 Offer专项突击版系列, 大家在公众号算法精选里回复剑指offer2就能看到该系列当前连载的所有文章了, 记得关注哦~题目描述请实现 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。提示-10000 Node.val 10000Node.random 为空null或指向链表中的节点。节点数目不超过 1000 。题目思考如何处理 random 指针?解决方案思路如果只有 next 指针的话很简单, 我们只需要对每个节点新建一个相同值的节点, 并保持指向关系, 逐个遍历过去即可现在多了个 random 指针, 想要定位新的指向的节点, 一个比较自然的想法就是额外维护一个老节点到新节点的映射关系, 可以用字典来实现第一遍遍历, 就只关注 next 部分, 并建立好映射关系第二遍遍历, 考虑 random 部分, 找到对应的新链表的节点, 然后当前节点的 random 指针指向它即可复杂度时间复杂度O(N)每个节点只需要遍历两次空间复杂度O(N)额外需要一个字典代码classSolution:defcopyRandomList(self,head:Node)-Node:ifnothead:returnNonemaps{}# 第一遍遍历, 建立新的链表, 以及老节点到新节点的映射关系copyHeadNode(head.val)origin,copyhead,copyHead maps[origin]copywhileorigin.next:# 新建下一个节点, 并建立next关系copy.nextNode(origin.next.val)originorigin.nextcopycopy.nextmaps[origin]copy# 第二遍遍历, 处理random指针部分origin,copyhead,copyHeadwhileorigin:iforigin.random:# 如果老节点random指针指向非空的话, 就将当前新节点也指向随机节点对应的新节点copy.randommaps[origin.random]originorigin.nextcopycopy.nextreturncopyHead大家可以在下面这些地方找到我~我的 GitHub我的 Leetcode我的 CSDN我的知乎专栏我的头条号我的牛客网博客我的公众号: 算法精选, 欢迎大家扫码关注~

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询