剑指Offer:复杂链表的复制

【剑指offer】复杂链表的复制(详解 + 两种方法) 【剑指offer】复杂链表的复制 【本题链接】 【题目描述】 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空) 【题目分析】 本题具有一定难度,主要考查了对于链表的掌握,我们主要使用两种方法解决此题,常规方法逻辑思维比较复杂,对于数据结构的掌控力要求比较高,可以有效的锻炼代码能力和逻辑思维。第二种使用map解决,较为方便 阅读详情
# -*- coding:utf-8 -*-
#class RandomListNode:
#     def __init__(self, x):
#        self.label = x
#        self.next = None
#        self.random = None
"""
分三步:
第一步:复制每个节点,如:复制节点A得到A1,将A1插入节点A后面
第二步:遍历链表,A1->random = A->random->next;
第三步:将链表拆分成原链表和复制后的链表
"""
class Solution:
    # 返回 RandomListNode
    def Clone(self, pHead):
        # write code here
        self.cloneNodes(pHead)
        self.ConnectSiblingNodes(pHead)
        return self.ReconnectNodes(pHead)
    #复制每个节点
    def cloneNodes(self, pHead):
        pNode = pHead
        while(pNode != None):
            #每次随机分配一个新地址来存放待赋值节点的值
            pCloned = RandomListNode(pNode.label)
            pCloned.next = pNode.next
            pCloned.random = None
            
            pNode.next = pCloned
            pNode = pCloned.next
            
    #遍历链表
    def ConnectSiblingNodes(self, pHead):
        pNode = pHead
        while(pNode != None):
            pCloned = pNode.next
            if (pNode.random != None):
                pCloned.random = pNode.random.next
            pNode = pCloned.next
    # 将链表拆分成原链表和复制后的链表
    def ReconnectNodes(self, pHead):
        pNode = pHead
        pClonedHead = None
        pClonedNode = None
        if (pNode != None):
            pClonedHead = pClonedNode = pNode.next
            pNode.next = pClonedNode.next
            pNode = pNode.next
            
        while(pNode != None):
            pClonedNode.next = pNode.next
            pClonedNode = pClonedNode.next
            pNode.next = pClonedNode.next
            pNode = pNode.next
        return pClonedHead

影视站泛目录程序(泛目录站群):构建多元化影视内容平台的利器 同时,搭建多元化影视内容平台还能够为平台创造更多商业价值,提升平台的竞争力。构建多元化影视内容平台:通过影视站泛目录程序,影视平台可以整合来自不同渠道和来源的影视资源,打破传统影视平台的局限性,提供更加多样化的影视内容供用户选择。提高用户体验:泛目录站群程序能够自动化处理和分类整理影视资源,提供便捷的搜索功能,使用户能够快速找到所需的影视内容,提升用户的使用体验。增加用户粘性:通过提供多元化的影视资源和个性化的推荐服务,影视站泛目录程序可以吸引用户长时间停留在平台上,增加用户的粘性和忠诚度。 阅读详情

相关推荐

【实战】ESP32 + LN298N 实现电动推杆的闭环位置伺服控制

本文详细介绍了如何使用ESP32微控制器和LN298N电机驱动模块,为普通电动推杆增加编码器反馈,实现精准的闭环位置伺服控制。文章从硬件选型与接线讲起,深入解析了编码器四倍频计数原理与位置换算,并重点阐述了PID控制算法的核心思想、代码实现及参数整定方法,旨在帮助读者从零构建一个反应迅速、定位精准的智能执行器系统。

weixin_29195615的博客 320

【leetcode】剑指 Offer 35. 复杂链表的复制(python)

思路:哈希表 利用哈希表的查询特点,考虑构建 原链表节点 和 新链表对应节点 的键值对映射关系,再遍历构建新链表各节点的 next 和 random 引用指向即可。 详细请看leetcode题解,本文仅个人take notes """ # Definition for a Node. class Node: def __init__(self, x: int, next: 'Node' = None, random: 'Node' = None): self.val = int(x.

Rudy的博客 518

【obj To 3DTiles 进阶实战】 从零配置地理坐标系与扩展属性元数据

本文详细解析了如何将OBJ模型转换为3DTiles格式,重点介绍了地理坐标系配置与属性元数据扩展的实战技巧。通过obj23dtiles工具,开发者可以精准定位模型经纬高坐标,并添加结构化属性表,实现城市规划模型在数字孪生平台的高效应用。

weixin_27215337的博客 368

python每日一题【剑指 Offer 35. 复杂链表的复制】

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

qq_42896431的博客 227

手机摄影新宠:In-line Hardware EIS如何让你的4K视频稳如鸡头(附实测对比)

本文深入解析了手机摄影中的In-line Hardware EIS(硬件级行内电子图像稳定)技术。通过对比传统软件EIS,阐述了其通过硬件管道实时处理实现极低延迟、减少画面裁切和有效抑制果冻效应的核心优势,并结合4K视频的日夜间实测,展示了该技术如何让手持拍摄的视频“稳如鸡头”,显著提升创作体验与成片质量。

tree的博客 998

从零开始:用7353张VOC/YOLO格式混凝土缺陷数据集训练你的第一个检测模型

本文详细介绍了如何使用7353张VOC/YOLO格式的混凝土缺陷数据集训练首个目标检测模型。从环境配置、数据解析到YOLOv5模型训练与优化,提供了完整的实战指南,特别针对数据不平衡问题给出了解决方案,助力开发者快速掌握混凝土缺陷识别技术。

weixin_42651281的博客 257

python复制链表(深拷贝)

a.建立新节点,并向 dic 添加键值对 (原 cur 节点, 新 cur 节点)。2、初始化: 哈希表 dic , 节点 cur 指向头节点。1、若头节点 head 为空节点,直接返回 null。a.构建新节点的 next 和 random 引用指向。5、返回值: 新链表的头节点 dic[cur]。力扣138:创建哈希表(字典),创建新节点。b.cur 遍历至原链表下一节点。b.cur 遍历至原链表下一节点。

weixin_43638507的博客 384

第10章: MMU notifier与HMM的协作

本文摘要: HMM(Heterogeneous Memory Management)是Linux内核提供的异构内存管理框架,用于统一CPU与设备(如GPU、DSP等)的内存访问。它通过镜像页表技术实现虚拟地址空间共享,自动同步CPU和设备页表变化,支持透明的内存迁移和设备内存管理。HMM构建在mmu_interval_notifier机制上,利用序列号检测页表修改冲突,提供高效并发控制。核心数据结构包括hmm_range和HMM PFN标志位,通过hmm_range_fault()实现页表遍历和缺页处理。

图形/计算GPU的驱动与虚拟化技术分享园地 3101

剑指 Offer 35. 复杂链表的复制(逻辑)1

请实现 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: 输入

秋雨行舟 292

清洁机器人之屏幕(中,大LCD)方案--ITE 联阳986x系列 soc显控芯片介绍

清洁机器人之屏幕(中,大LCD)方案--ITE 联阳986x系列 soc显控芯片介绍

AIoT深度探索者 | 嵌入式系统架构师 深耕物联网(IoT)与人工智能(AI)融合技术,聚焦​​边缘计算、图像开发、低功耗通信协议​​,致力于智能硬件,关注我获取最新技术文章信息与海量资源~ 2668

Spring AI Alibaba实战训练营-28 手把手教你用SAA+ Nacos 构建分布式 MCP 应用

本文介绍如何使用Spring AI Alibaba和Nacos构建分布式MCP应用,实现AI模型与工具服务的动态发现和调用。主要内容包括:1) 项目架构设计,包含MCP Server、Nacos注册中心和MCP Client三个核心组件;2) 环境准备要求,如Java 17+、Maven 3.6+、Nacos 3.1.0+等;3) 详细实施步骤:启动Nacos服务、注册MCP服务端、配置MCP网关聚合服务、设置MCP客户端发现机制。通过这种架构,开发者可以轻松扩展新工具服务,无需修改客户端代码,实现服务动态

program哲学 311

剑指offer第25题:复杂链表的复制

剑指offer第25题:复杂链表的复制题目描述复杂链表的复制源码 题目描述 复杂链表的复制 源码 /* struct RandomListNode { int label; struct RandomListNode *next, *random; RandomListNode(int x) : label(x), next(NULL), rando...

可爱的小腊肉 167

030、微透镜阵列与光场成像:从光场相机到深度感知的演进

文章摘要: 光场成像通过微透镜阵列(MLA)同时记录光线的位置与方向,实现单次曝光获取三维信息。其核心架构包括主镜头+MLA+传感器或相机阵列,各有分辨率与体积的权衡。光场支持先拍照后对焦和深度估计,但受限于微透镜基线短,精度较低。深度算法需结合多视角立体匹配与极平面图像分析,并处理噪声和温度漂移等实际问题。光场适用于短距离动态场景(如手势识别),而远距离高精度需求仍需激光雷达。建议初学者通过二手光场相机和开源工具入门,理解光场“角度域”与“空间域”的协同机制。

sundong_81的博客 51

剑指offer算法题025:复杂链表的复制

小编在求职找找工作期间剑指offer上的算法题刷了很多遍,并且每道题小编当时都总结了一种最适合面试时手撕算法的最优解法。考虑到剑指offer算法题在面试中的高频出现,小编每天和大家分享一道剑指offer上的算法题,以及小编总结的答案。下面是第025道剑指offer算法题: 题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返

我的博客 297

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

剑指offer35:复杂链表的复制 python

剑指offer35:复杂链表的复制 python题目描述解法 题目描述 解法 深度优先搜索 在这里插入代码片class Solution: def copyRandomList(self, head: 'Node') -> 'Node': def dfs(node): if node is None: return None if node in visited:

weixin_43494312的博客 287

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

(C++)剑指offer-25:复杂链表的复制(分解让复杂问题简单)

剑指offer-25:复杂链表的复制 考虑到复杂链表的节点除了指向它下一个节点外,还存在节点随机指向一个任意节点,所以大致分为三步来处理: 1.复制每个节点,放在原节点的后面,复制后节点的next指向=原节点的指向; 2.复制任意指向的节点,例如A指向C,则A’指向C’; 3.链表拆分,偶数位的节点是原节点,奇数位的节点是新节点。 由于遍历了原来的整个复杂链表且存在随机指针指向另一个节点,所以时间...

qq_35264256的博客 193

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

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

剑指 offer 35 : 复杂链表的复制 哈希表 用空间换时间。 利用哈希表的查询特点,考虑构建原链表节点和新链表对应节点的键值对映射关系,在遍历构建新链表各节点的 next 和 random 引用指向即可。 /* // Definition for a Node. class Node { int val; Node next; Node random; public Node(int val) { this.val = val;

zone的博客 110

剑指Offer: 复杂链表的复制

剑指Offer: 复杂链表的复制 题目描述 请实现一个函数可以复制一个复杂链表。 在复杂链表中,每个结点除了有一个指针指向下一个结点外,还有一个额外的指针指向链表中的任意结点或者null。 注意: 函数结束后原链表要与输入时保持一致。 算法 暴力求解 双重for循环的主要目的是查找random节点的位置 分为两步实现: 根据next指针新建链表 双重for循环,每次查找到一个random...

Erice_s的博客 221

【链表】剑指Offer: 复杂链表的复制

【在线编程】复杂链表的复制 【问题描述】 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空) 【解题思路 & Java实现】 方法一:依次复制每个结点以及该结点的next结点和random结点。时间复杂度O(n),空间复杂度O(...

journey_TripleP的博客 218

剑指Offer(二十五):复杂链表的复制

剑指Offer(二十五):复杂链表的复制 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法、机器学习干货 csdn:https://blog.youkuaiyun.com/baidu_31657889/ github:https://github.com/aimi-cn/AILearners 一、引子 这个系列是我在牛客网上刷《剑指Offer》的刷题笔记,旨在提升下...

小明的博客 821

剑指Offer:复杂链表的复制

1.问题描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空) 2.解题思路 ①:问题分析 一个单向链表的复制很简单,但是这道难点在于,我们多了一个random随机结点,最重要的是,我们如何找到这个复制后的随机结点。 ...

qq_42714490的博客 222

【LeetCode & 剑指offer刷题】链表题8:35 复杂链表的复制(138. Copy List with Random Pointer)...

【LeetCode & 剑指offer刷题】链表题8:35 复杂链表的复制(138. Copy List with Random Pointer) 【LeetCode & 剑指offer 刷题笔记】目录(持续更新中...) 138. Copy List with Random Pointer A linked list is...

技术改变世界 708

剑指offer:复杂链表的复制

题目:请实现函数complexListNode*Clone(ComplexListNode*pHead), 复制一个复杂链表。在复杂链表中,每个结点除了有一个m_pNext指针指向下一个结点外,还有一个m_pSibling指向链表中的任意结点或者NULL. 复杂链表如图例: 我们对单链表的复制已经很清楚,因此很容易形成思路,先将链表整个复制,但是先将m_pSiling初始化为NULL(显然,我

laughter8的博客 441

剑指offer:复杂链表的复制

输入一个复杂链表,返回结果为复制后复杂链表的head PS:每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点 (注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空) import java.util.HashMap; /*输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点), 返回结果为复制...

一步一步滴往上爬 157
上一篇: 输入一个链表,输出该链表中倒数第k个结点。
下一篇: 剑指Offer:数组中出现次数超过一半的数字
destiny_python
博客等级 码龄10年 46粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值