c++实现---复杂链表的复制

【芯片驱动】2. CMT2300A配合硬件测试(灵敏度和发射功率)的软件实现 前言 在开发一款无线射频产品的时候,软件是一部分,硬件也是一部分。而决定无线收发性能的,首先是硬件的匹配电路,然后才到软件部分的优化。 一款无线射频产品,首先需要先决定是在那个频率范围内(当然是国家允许的范围内),然后硬件则需要在基于这个频点范围进行硬件的参数匹配,具体又分为发送功率匹配、天线匹配、和接收灵敏度的匹配。 现在我们使用2300a这款无线芯片来说,除非自己的团队是射频专家,则可以自己进行无线外围电路的设计外,另外一种更加快捷的方式,就是寻找原厂技术支持,他们会给... 阅读详情

题目:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)
解决本题最大的困难就是结点随机指针的赋值,因为并不清楚复制后的随机指针所指向的位置,因此需要确定随机指针位置,才能完成复制
*解题思路:
*1、遍历链表,复制每个结点,如复制结点A得到A1,将结点A1插到结点A后面;
*2、重新遍历链表,复制老结点的随机指针给新结点,如A1.random = A.random.next;
*3、拆分链表,将链表拆分为原链表和复制后的链表

class Solution {
public:
    void cloneNodes(RandomListNode *pHead){//step1:完成值和next指针的拷贝
        RandomListNode *pNode=pHead;
        while(pNode!=nullptr){
            //每一次复制都将A的值和next指针拷贝给A',而A’的随即指针先置空
            RandomListNode *pClone=new RandomListNode(-1);
            //这一步刚开始用RandomListNode *pClone=nullptr;这种方式报错了
            pClone->label=pNode->label;
            pClone->next=pNode->next;
            pClone->random=nullptr;
            //A的next指向自己的克隆A',并且后移A至A'的next,也就是原始链表中A的next
            pNode->next=pClone;
            pNode=pClone->next;
        }
    }
    void connectRandomClone(RandomListNode *pHead){//step2:完成随机指针的拷贝
        RandomListNode *pNode=pHead;
        while(pNode!=nullptr){
            RandomListNode *pClone=pNode->next;
            if(pNode->random!=nullptr){//链表结构已经是A->A'->B->B'...这样的结构,因此对于随机指针不为空的结点,克隆结点的随机指针就是原始结点随机指针的下一个结点
                pClone->random=pNode->random->next;
            }
            pNode=pClone->next;
        }
    }
    RandomListNode *reConnectNodes(RandomListNode *pHead){//step3:拆分链表,得到复制到的链表(奇数是原始链表结点,偶数位置是复制链表结点)
        RandomListNode *pNode=pHead;
        RandomListNode *pCloneHead=nullptr;//头节点记录链表起始位置
        RandomListNode *pCloneNode=nullptr;
        
        if(pNode!=nullptr){//首先得到复制链表的头节点
            pCloneHead=pCloneNode=pNode->next;
            pNode->next=pCloneNode->next;//pNode断开原来链接,后移到pClone的下一个位置
            pNode=pNode->next;
        }
        while(pNode!=nullptr){
            pCloneNode->next=pNode->next;//pClone指向pNode的下一个位置
            pCloneNode=pCloneNode->next;//后移到下一个位置
            pNode->next=pCloneNode->next;;
            pNode=pNode->next;
            
        }
        return pCloneHead;
    }
    RandomListNode* Clone(RandomListNode* pHead)
    {
        cloneNodes(pHead);
        connectRandomClone(pHead);
        return reConnectNodes(pHead);
    }
};
Win11只读模式无法关闭的终极解决方案 通过以上方法,我们应该能够解决Windows 11中文件夹无法取消只读状态的问题。如果问题仍然存在,请确保你的账户具有足够的权限来修改文件夹属性,并考虑是否有其他安全软件或策略阻止了权限更改。在操作过程中,请务必小心谨慎,避免误操作导致数据丢失或系统损坏。希望本文能够帮助到大家! 阅读详情

相关推荐

【Qualcomm高通音频】外部Codec调试流程_ES7243E

一、 调试大纲 调试正式开始之前,想办法获取以下信息:硬件设计原理图/Codec参考驱动代码/FAE联系方式。 1. 从硬件设计原理图,我们要获取到Codec芯片和CPU通过什么接口连接,包括数据传输接口、控制接口、reset和power引脚。 2. Codec参考驱动代码,一般正规的厂商都会提供的,至少也提供对应场景的寄存器配置。 接下来开始正式调试,大致分为以下流程: a. 数据...

crow_ch的博客 8273

【剑指offer】面试题35:复杂链表的复制(Java)

请实现 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]] 示例...

hx1043116928的博客 796

服务器冗余电源维修图纸,冗余热备份电源的电路图设计

在设计某高可靠性计算机系统时,要求其配套电源采取冗余设计。一般来说,可以采取的方案有容量冗余、冗余冷备份方式、并联均流的N+1备份方式、冗余热备份方式。容量冗余是指电源的最大负载能力大于实际负载,也就是“大马拉小车”,其缺点是不利于提高电源的效率,而且对提高电源的可靠性意义不大。冗余冷备份方式是指电源由两个或多个功能相同的单元模块组成,电源启动后由其中一个单元模块向设备供电,当工作单元发生故障时,...

weixin_39671509的博客 1995

复杂链表的复制的几种解法 — C+++实现

题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空) 解题思路 代码实现 ...

Jeaten 520

Axure原型模板与元件库APP交互设计素材(附资料)

在Axure中,手机模型是展示APP或小程序界面效果的重要工具。通过导入手机模型元件,设计师可以更加直观地模拟真实设备的显示效果,从而更准确地评估设计的可行性和用户体验。Axure官方及第三方资源库中提供了多种品牌和型号的手机模型,如iPhone、Android等,设计师可以根据项目需求选择合适的模型进行使用。Axure作为一款强大的原型设计工具,为APP和小程序的设计与开发提供了丰富的界面组件元件库和交互设计素材。

招风的黑耳优快云 1981

Qt C++ bridge模式(桥)

Bridge模式使得抽象和实现能够相对独立。 bridge.h #pragma once #include class CImplementor { public: virtual void operateImp() = 0; }; class CRectImplementor : public CImplementor { public: CR

thinkme2010的专栏 1894

剑指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]...

AplusX 504

支付宝支付(三):周期扣款实现注意细节

一、周期扣款实现说明 1、官方文档入口:https://opendocs.alipay.com/open/20190319114403226822/intro 2、根据官方文档说明,周期扣款有两种方式:先签约后代扣场景和支付后签约场景 3、周期扣款接入问题文档: a>https://opendocs.alipay.com/support/01rg24 b>https://opensupport.alipay.com/support/knowledge/50249/20160248753

新鲜雾霾的博客 5704

复杂链表的复制-C++

// 面试题35:复杂链表的复制 // 题目:请实现函数ComplexListNode* Clone(ComplexListNode* pHead),复 // 制一个复杂链表。在复杂链表中,每个结点除了有一个m_pNext指针指向下一个 // 结点外,还有一个m_pSibling 指向链表中的任意结点或者nullptr。 #include struct ComplexListNode { int m_nValue; ComplexListNode *m_pNext;

了解➔熟悉➔掌握➔精通 652

华为OD机试真题 新系统 - 勇攀数字高峰 (Java/Py/C/C++/Js/Go)

本文整理华为 OD 机试新系统机考真题库,涵盖高频考点精析与完整题目内容,提供 C 语言、Java、C++、Python、Go、JavaScript 多语言源码实现,搭配详细解题思路讲解,并支持在线 OJ 刷题练习,助力高效备考华为 OD 机试新系统。

算法大师! 2097

Keras中神经网络可视化模块keras.utils.visualize_util安装配置方法

Keras中神经网络可视化模块keras.utils.visualize_util安装配置方法

jacke121的专栏 2759

复杂链表的复制(C++)

题目: 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空) 思路: 主要分为三步: 1. 先复制链表中的每个节点,并接到相应节点之后 2. 给原来有random指向的节点的复制节点连接random项 3. 将复制的链表和原始...

Jerry_Leo_liu的博客 230

LVGL 丝滑菜单3(Silk Menu)

h。

摸鱼专家 92

剑指offer-复杂链表的复制C++实现

剑指offer-复杂链表的复制 原题链接 #include <iostream> #include <unordered_map> using namespace std; struct RandomListNode { int label; struct RandomListNode *next, *random; RandomListNode(int x) : label(x), next(nullptr), random(nullptr) {} }

YANJINING 842

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

C++实现复杂链表的复制

一、什么是复杂链表复杂链表的每个结点具有三个成员,分别是存放数据的data和指向下一个结点的指针和指向随机节点的指针。 复杂结点的结构:template <class T> struct ListNode { T data; ListNode<T>* next; ListNode<T>* random; ListNode(const T& d) :d

ArchyLi 2150

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

用C++ 实现复杂链表的复制

首先我们先来看一下复杂链表的结构: 这个链表不能直接进行复制,如果我们对其进行直接复制将会发现复制后的链表的random依旧指向之前链表的位置,并没有指向自身的某个节点。因此,我们需要好好分析一下。方案一: 我们可以一个节点一个节点的进行复制,并将复制后的节点放到原节点的后边。这样就形成了一个这样的链表: 然后我们将复制后的节点指向原节点random...

weixin_34390105的博客 183

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

剑指offer:复制复杂链表 使用C++实现

题目: 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空) 题目解析已经写到注释里面了,这里面写的时候一定要细心哟 /* struct RandomListNode { int label; ...

m0_38086244的博客 174

剑指Offer JZ25 复杂链表的复制 C++实现

题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空) 解题思路 方法一:直接法 1、思路:分三步走,首先拷贝每个结点,并将它们分别插入被拷贝结点之后,比如拷贝前:A->B->C;拷贝后:A->A'->B->B'->C->C',然后对拷贝的结点的random指针进行赋值,

weixin_41020287的博客 178

剑指offer第二十五题【复杂链表的复制】c++实现

复杂链表的复制 参与人数:1297时间限制:1秒空间限制:32768K通过比例:17.22%最佳记录:0 ms|8552K(来自  LuLu1990) 题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点)。 将复制后的节点插入在原节点后面 然后就有node->random=old->random->next

u011692312的专栏 687

复杂链表的复制

题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空) 思路 第一步:遍历链表,复制每一个结点,并将复制的结点连接在原结点后面(复制next指针) 第二步:遍历链表,判断结点特殊指针是否为空,如果不为空,则将该结点特殊指针连接...

ysl_ysl123的博客 172

剑指 Offer 35. 复杂链表的复制(C++实现)

请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。链接:https://leetcode.cn/problems/fu-za-lian-biao-de-fu-zhi-lcof。不占用额外辅助空间的方法,空间复杂度O(1),时间复杂度O(n)以空间换时间的方法,空间复杂度O(n),时间复杂度O(n)来源:力扣(LeetCode)

Kk_1025的博客 198

复杂链表复制c++

qq_29487479的博客 136

剑指offer35--复杂链表的复制——java/C++实现

题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空) 思路: 哈希表法 先复制一个链表,同时用哈希表存储所有指针 然后再遍历链表,利用哈希表复制所有指针 /* struct RandomListNode { ...

wake_alone 195

剑指offer66题--Java实现,c++实现和python实现 25.复杂链表的复制

题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空) C++ /* struct RandomListNode { int label; struct RandomListNode *next, *ran...

一个有梦想的小码农的博客 193

复杂链表的复制 | 赋值链表

面试题26:复杂链表的复制 1.题目描述 请实现函数 ComplexListNode*Clone(ComplexListNode* pHead)复制一个复杂链表。在复杂链表中,每个结点除了有一个 m_pNext指针指向下一个结点外,还有一个m_pSibling指向链表中的任意结点或者NULL。结点的C++定义如下: struct ComplexListNode { int m_nV...

ThinPikachu的博客 469

剑指 Offer 35. 复杂链表的复制(时间复杂度O(n),c++实现)

剑指 Offer 35. 复杂链表的复制(时间复杂度O(n),c++实现)

唐学长的博客 356
上一篇: c++实现---二叉树中和为某一值的路径
下一篇: c++实现---二叉搜索树与双向链表
codeFizz
博客等级 码龄9年 10粉丝 55原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值