剑指 Offer 35. 复杂链表的复制(golang版)

剑指offer所有编程练习总结分析 给出剑指offer所有题目描述和对应的解题思路,并且在最有给出对应的代码展示和测试内容 由于牛客剑指Offer题目经过整理和筛选,是面试备考的经典资源之一,因此它的重要性在面试准备过程中是很高的。做这些题目可以帮助面试者熟悉常见的面试题型、巩固基础知识、提升编程能力,为应对面试提供了很好的准备。然而,还需注意不仅仅局限于做题,理解背后的原理和思想同样重要,以便能够在面试时灵活运用和展示自己的能力。 阅读详情
  • 题目描述
请实现 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 <= 10000
Node.random 为空(null)或指向链表中的节点。
节点数目不超过 1000 。
 
注意:本题与主站 138 题相同:https://leetcode-cn.com/problems/copy-list-with-random-pointer/

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/fu-za-lian-biao-de-fu-zhi-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
  • 思路
    1、先用尾插法生成新的链表,在这个过程中保存新旧链表各个节点的位置信息,tmp1[*Node]int 保存旧链表节点信息,key值为节点的指针地址,value为顺序信息,tmp2[int]*Node 保存新链表的节点信息
    2、遍历链表,在tmp1中找到random所指向的节点,取出value,然后在tmp2中找到该value对应的节点地址,赋值过去即可。
  • 代码
func copyRandomList(head *Node) *Node {
	//如果为空直接返回
	if head == nil {
		return nil
	}

	root := head
	//tmp1保存head链表各个节点的顺序,键值为节点的指针地址,值为第几个节点
	tmp1 := make(map[*Node]int)
	//tmp2保存新链表各个节点的顺序,键值为节点的顺序值,值为节点的指针地址
	tmp2 := make(map[int]*Node)
	resHead := new(Node)
	resRoot := resHead
	i := 0
	for root != nil {
		//将老链表的顺序信息保存到tmp1中
		tmp1[root] = i
		//新建节点,并将节点挂到resRoot后(尾插法)
		tmpNode := &Node{root.Val,nil,nil}
		resRoot.Next = tmpNode
		resRoot = resRoot.Next
		//将新节点的顺序信息保存到tmp2中
		tmp2[i] = tmpNode
		root = root.Next
		i++
	}

	root = head
	resRoot = resHead.Next
	for root != nil {
		//如果节点的random不为空,从tmp1中取出节点的random在老链表中指向的节点的位置,即tmp1[node]的值k,然后取出tmp2[k]的值,赋值即可
		if root.Random != nil {
			d := tmp1[root.Random]
			resRoot.Random = tmp2[d]
		}
		root = root.Next
		resRoot = resRoot.Next
	}
	return resHead.Next
}

告别米级误差:手把手教你用Nordic nRF52840实现厘米级蓝牙测距(Channel Sounding实战) 本文详细介绍了如何利用Nordic nRF52840开发板和蓝牙信道探测(Channel Sounding)技术实现厘米级高精度测距。通过硬件配置、软件优化和实战案例,帮助开发者快速掌握低功耗蓝牙测距技术,适用于工业自动化、智能仓储等场景。 阅读详情

相关推荐

C# NX二次开发:两种过滤器设置方案的实战解析与场景适配

本文深入解析C# NX二次开发中的两种过滤器设置方案:AddFilterHandler回调与MaskTriple属性设置。通过实战案例对比其性能差异与适用场景,帮助开发者根据需求选择最优方案,提升NX插件开发效率与交互体验。特别针对BlockStyler集成场景提供专业建议,是NX二次开发者的实用指南。

weixin_33739646的博客 844

【LeetCode】剑指 Offer 35. 复杂链表的复制 - Go 语言题解

【LeetCode】剑指 Offer 35. 复杂链表的复制 - Go 语言题解

weixin_44211968的博客 580

NPP/VIIRS夜间灯光数据下载和介绍

夜间灯光数据作为当前比较火热的研究数据,与其他遥感数据不同,它是通过DN值来体现所携带的信息,最常用的使用月度数据。 该数据数据量大,下载慢,相对来说较难快速获取。 一、数据下载 美国国家海洋大气管理局NOAA下属的NCEI国家环境信息中心Earth Observation Group。 二、月度数据文件介绍 从网站上下载的逐月的灯光数据文件是压缩包的形式,每月的数据包括vcm, vcmsl两个版本的压缩包,其中vcm版本排除了受杂散光影响的数据,vcmsl版本为辐射值经过杂散光校正程序后的数

端木宛白的博客家园 7376

Go语言实现:【剑指offer】复杂链表的复制

该题目来源于牛客网《剑指offer》专题。 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空) Go语言实现: type RandomListNode struct { Val int Next *Rand...

golang 相关内容分享 366

STM32 HAL库定时器中断里读编码器速度准吗?聊聊MG310电机的测速与防溢出处理

本文探讨了STM32 HAL库在定时器中断中读取编码器速度的精度问题,特别针对MG310电机的测速与防溢出处理提供了解决方案。通过对比定时中断法和编码器模式的性能,揭示了硬件编码器接口在降低误差和CPU占用率方面的优势,并详细介绍了CubeMX配置技巧和防溢出处理的工程实践。

weixin_28720767的博客 401

在 Linux/Debian/Ubuntu 上使用 Brasero 刻录光盘

在 Ubuntu 系统中,Brasero 是一个非常方便的光盘刻录工具。无论是创建数据光盘、音频光盘还是刻录光盘镜像文件,Brasero 都能轻松胜任。本文将介绍如何在 Ubuntu 上安装和使用 Brasero 进行光盘刻录。

I AM COMING BACK... 3550

golang切片和数组拷贝(浅拷贝和深拷贝)

我们提到的深拷贝和浅拷贝,则指的是引用类型的值处理方案。数组和切片属于哪种? 浅拷贝指的是,把变量里面存的内存地址拷贝了,所指向的真实值并没拷贝。

西京刀客 1万+

六轴机械臂正逆解计算

机械臂运动学就是。包括(Forward Kinematics)和(InverseKinematics)两部分。正运动学就是逆运动学则是关节变量->机械臂末端执行器的姿势=正向运动学机械臂未端执行器的位姿->关节变量=逆向运动学。

gaoxiaochan的博客 1万+

LC 剑指 Offer 35. 复杂链表的复制

LC 剑指 Offer 35 请实现 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]]

qq_29760429的博客 509

Oracle EBS和华为MetaERP在会计科目(COA)设计上的观察非常精准。这两种设计确实代表了两种截然不同的系统架构思想,我们可以从设计哲学、优劣对比和演进关系三个方面进行深入分析。

OracleEBS与华为MetaERP的COA设计对比分析 OracleEBS采用弹性域架构,通过固定段数字符串实现多维度核算,强调稳定性和全球统一标准,但修改成本高、扩展性受限。华为MetaERP采用解耦架构,将核算单元、自然科目和核算维度分离,支持动态扩展和灵活调整,更适合业务快速变化的企业。 OracleEBS优势在于强一致性和成熟稳定,劣势是灵活性差;华为MetaERP优势是极致灵活性,劣势是对管理要求高。两者代表了不同时代的企业软件设计理念:OracleEBS适合标准化需求,MetaERP则面向快

金牌架构师 431

自动驾驶大模型---小鹏汽车VLA大模型

随着自动驾驶技术的进步,小鹏汽车正通过云端大模型蒸馏技术,将72B参数的VLA大模型轻量化后部署到车端,以提升自动驾驶系统的智能和安全性。这种技术路线不仅解决了“模态不统一”的问题,还通过强化学习增强了模型的表现。

智能汽车人的博客 2235

Golang | Leetcode Golang题解之第138题随机链表的复制

Golang | Leetcode Golang题解之第138题随机链表的复制

weixin_66442839的博客 576

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

TensorFlow与PyTorch选型指南:快速判断该先学哪一个的5个问题

上周同事甩来一个需求:训练一个商品图片分类器,一个月内部署上线,团队就两个人。选 TensorFlow 还是 PyTorch,我琢磨到半夜。学习计划仓库 machine-learning-for-software-engineers 把两个框架的学习资源都列进去了,却替你不下结论:选型答案取决于项目,不取决于谁"更强"。 ## 解决什么问题:先弄清两个框架各自治什么病 框架之间不是谁高谁低,而

gitblog_00988的博客 142

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

剑指offer35---复杂链表的复制

题目描述:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向 下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的 head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接 返回空) 思路:先复制链表的next节点,将复制后的节点接在原节点后,然后复制其它的 节点,最后取偶数位置的节点(复制后的节点)。 package Function; /** ...

xiaorui的博客 183

剑指 Offer 35:复杂链表的复制

请实现 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]] 我的方法: 通过链表构造列表,再通过列表构造链表,很复杂!!! """ # Definition for a Node. clas

qq_48305176的博客 171

剑指 Offer 35. 复杂链表的复制

直接在原链表上复制每一个节点在原节点的后面(复制操作),1->2->3复制后为1->1->2->2->3->3。再让新的复制节点的random的指针域指向原节点指针的下一个节点,最后把新链表从原链表拆分出来。用两个Node型的动态数组ArrayList,一个为temp,另一个为res,temp存放原链表的每一个节点,res存放复制过来的每一个节点(节点中next指针域和random指针域都没有赋值),然后遍历res,给res中每一个节点的next指针域和random指针域赋值。可以用哈希+递归实现。

m0_51321956的博客 185

剑指Offer.35 复杂链表的复制

请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null 解题思路 用HashMap保存<当前节点, 复制的当前节点> 遍历原有链表, 复制所有节点, 通过HashMap建立源节点和复制后的节点的联系 然后再次遍历原链表, 将原来节点的next和random的关系也复制给新节点 代码 /* // Definition for a Node. class Node {

qq_43269370的博客 93

EUPE三大评估任务完整指南:kNN分类、语义分割与深度估计如何快速上手

EUPE(Efficient Universal Perception Encoder,高效通用感知编码器)是 Meta AI 发布的一个**单模型、多任务**视觉编码器:同一套权重既能做图像分类,也能做密集预测和视觉语言建模。本文面向新手,带你**快速**看懂 EUPE 仓库内置的三大评估任务——**kNN 分类**(ImageNet-1k)、**语义分割**(ADE20K)与**深度估计**(

gitblog_00252的博客 182

找工作必做事项-剑指offer

自从上次重新学习了一下算法后,写了一篇总结的文章: 算法总结,写完之后总想去检验一下自己的水平如何。 记得毕业前找工作的时候,用C++刷了一遍剑指offer,都写在网易博客上http://wuhenpzq.blog.163.com/blog, 如今再看,网易博客已经关闭了,好在自己还能查看。当时刷题,更偏向于背题,不是基于对算法有足够的理解而解题的。 所以这次打算用Go再刷一遍剑指offer,看看自己是否真的提升了,同时也好比较一下C++和Go写算法题的区别。 刷完之后,发现对于大部分题,先确定使用哪种算法

699

剑指offer35复杂链表的复制

复杂链表的复杂,深拷贝

qq_36421001的博客 204

daidai-panel 一键更新链路完整解析:Watchtower、Docker CLI、二进制与 Magisk 四条路

daidai-panel 是一个轻量级定时任务管理面板(功能类似 Qinglong Panel),支持容器、裸机二进制和 Android Magisk 模块三种部署形态。面板部署到服务器上后,"面板本身怎么升级"是新手最常遇到的问题。好消息是:在「系统设置」→「概览」里点一下「检查系统更新」,面板会**自动识别你的部署方式**,并从 Watchtower 托管、Docker CLI 重建、二进制后

gitblog_00284的博客 186

复杂链表的复制(Java实现)

该题为剑指offer面试题26 牛客网测试地址:https://www.nowcoder.com/questionTerminal/f836b2c43afc4b35ad6adc41ec941dba 热度指数:70797  时间限制:1秒  空间限制:32768K算法知识视频讲解 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个

zjkC050818的博客 1366

KMS_VL_ALL_AIO 完整教程:一条命令激活 Windows 11 与 Office 2024,每周自动续期

重装完 Windows,桌面右下角"激活 Windows"的水印去不掉,打开 Office 又提示授权无效。单文件脚本 KMS_VL_ALL_AIO 一次运行就能完成 Windows 11 和 Office 2024 的 KMS 激活,之后按周自动续期,不用找密钥、不用记到期时间。 ## 60 秒上手:从克隆到激活完成 1. 命令行执行 `git clone https://gitcode.c

gitblog_00518的博客 223

YuE2 音乐生成实战:从 song.json 歌词请求到可校验 ABC 谱的完整链路

YuE2 是一个带符号规划(symbolic planning)能力的音乐生成模型,仓库 `examples/` 目录内置了一组最小可运行输入:一份 `song.json`(歌词 + 风格)就能驱动"文本 → 音频 + 乐谱"的完整生成;再注入双声部 ABC 谱,还能对同一旋律的两次和声编配做符号级对比。校验端则配了一个纯标准库实现的 `abc_tools.py`,任何没有 GPU 的机器都能完成

gitblog_01037的博客 1004

《剑指offer》 相应 在线测试地址

《剑指Offer》面试题集收录汇总 面试题1 赋值运算符函数 不适合在线模式 面试题2 实现Singleton模式 不适合在线模式 面试题3 二维数组中的查找 已收录 面试题4 替换空格 已收录 面试题5 从头到尾打印链表 已收录 ...

weixin_30367169的博客 92
上一篇: 剑指 Offer 33. 二叉搜索树的后序遍历序列(golang版)
下一篇: ThinkPHP5.1源码分析-container容器篇
l_mofi
博客等级 码龄9年 7粉丝 78原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值