题意
将一个链表复制一遍后输出,这个链表除了next指针外,还有一个random指针,随机指向链表中的节点(包括自身或者NULL)。

解法
生成一个新的链表,然后根据新老链表同时循环遍历,找到当前老链表的random是哪个节点,这时新链表也指向新链表中相应的节点。
别人的解法1:
用map将每个节点与新节点关联,然后根据老节点用map得到新节点,再根据老节点的next用map得到当前新节点的next,将其关联。同样可以用此方法得到新节点random,最后返回新节点的头部(用map通过老节点获取到)。

      Node *original = head;while(original){m1[original] = new Node(original->val);original = original->next;}original = head;while(original){if(original->next){m1[original]->next = m1[original->next];}if(original->random){m1[original]->random = m1[original->random];}original = original->next;}

别人的解法2:
在原链表上每个节点后都新增一个值相同的节点。
然后给每一个复制节点的random赋值,原节点的random的下一个即为复制节点的random。

cur->next->random=cur->random->next;

然后将两个链表分开(这里相当于处理了next),得到新链表。
总结:
这里主要的难点是如何快速地处理random。自己写的效率有点低下。没有利用到链表的性质,每个节点的地址是不变的。

leetcode 剑指 Offer 35. 复杂链表的复制相关推荐

  1. 【LeetCode 剑指 Offer 35. 复杂链表的复制(中等)】

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

  2. 【LeetCode】剑指 Offer 35. 复杂链表的复制

    [LeetCode]剑指 Offer 35. 复杂链表的复制 文章目录 [LeetCode]剑指 Offer 35. 复杂链表的复制 package offer;import java.util.Ar ...

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

    剑指 Offer 35. 复杂链表的复制 题目 题目链接 解题思路 题目理解 解题思路 具体代码 题目 题目链接 https://leetcode-cn.com/problems/fu-za-lian ...

  4. 【三次优化】剑指 Offer 35. 复杂链表的复制

    立志用最少代码做最高效的表达 请实现 copyRandomList 函数,复制一个复杂链表.在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意 ...

  5. 剑指offer——35复杂链表的复制

    这题很是巧妙. 突破了常规思维. 竟然可以把传入进来的链表和复制的链表链在一起.然后再算出slibling指针.最后在分离. 直接把空间复杂度变为O(1)了. 很巧妙,很实用. 题目: 请实现函数Co ...

  6. LeetCode笔记】剑指 Offer 35. 复杂链表的复制(Java、哈希表、原地算法)

    文章目录 题目描述 思路 && 代码 1. 哈希表法 2. 原地算法 二刷 题目描述 主要有两个考虑点: 不能改变原链表 新链表赋予 next.random 时,复制结点不一定存在 思 ...

  7. 剑指 Offer 35. 复杂链表的复制(哈希/衍生拆分图解)

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

  8. 【算法】剑指 Offer 35. 复杂链表的复制 【重刷】

    1.概述 地址:https://leetcode-cn.com/problems/fu-za-lian-biao-de-fu-zhi-lcof/ 请实现 copyRandomList 函数,复制一个复 ...

  9. 《剑指offer》-- 复杂链表的复制、字符串的排列、数组中出现次数超过一半的数字、连续子数组的最大和

    一.复杂链表的复制: 参考牛客网的chancy:https://www.nowcoder.com/questionTerminal/f836b2c43afc4b35ad6adc41ec941dba 1 ...

最新文章

  1. Mysql如何创建短索引(前缀索引)
  2. 蓝桥杯 - 牌型种数(dfs)
  3. base32php,ThinkPHP6.0使用extends Base方式处理后台登录逻辑
  4. 20190909 SpringBoot集成Swagger
  5. 深入浅出,解读阿里云云盾WAF防护功能
  6. 基于C#和DGAL包实现栅格影像的读取和显示
  7. Linux主流架构运维工作简单剖
  8. 云-PC-matlab-物联网及其它
  9. 虚拟机及CentOS7各个版本镜像下载地址
  10. 基于yolo3 与crnn 实现中文自然场景文字检测及识别
  11. ArcGIS/ArcMAP操作录屏视频及相关实验数据(行政界线、地名点、道路路网、水系、乡镇/街道面等)
  12. 上海瀚示中文显示电子拣货标签 智能仓储物流工匠级革新
  13. JavaScript 数组方法every()
  14. 3nf mysql表_数据库三大范式(1NF,2NF,3NF)及ER图
  15. Invalid HTTP method: PATCH executing PATCH
  16. day fit into much one too_2018年广东省高考英语听说考试真题A-E(附答案)
  17. 12个最真实的人型机器人,肉眼几乎无法区分,你见过几个?【楚才国科】
  18. 解决raw.githubusercontent.com地址DNS污染的方法参考
  19. idcardweb装入失败_新中新身份证读卡器接口API使用
  20. NGUI渲染机制——从顶点和UV说起

热门文章

  1. 期权实战交易最重要的经验
  2. 伺服驱动器中的补偿算法简要介绍
  3. java 判断输入的是正数还是0还是负数(正数-10,负数+10)
  4. 用scikit-learn 训练SVM的例子, clf.fit() clf.predict() 的作用
  5. 零信任:从制度信任到机器信任,区块链信任机制带来可信链接
  6. amlogic红外遥控器适配
  7. 你了解“暗数据”吗?
  8. xv6操作系统中添加用户应用程序
  9. EmlBuilder:一款超轻量级的EML格式电子邮件阅读和编辑工具
  10. 椎体压缩性骨折与骨密度:CT图像的自动检测与分类