当前位置: 首页 > news >正文

随机链表的复制

最直观的方法就是两层循环,建立完所有的节点后,第一层循环遍历节点,第二层循环找到random指向的对应节点并链接。

可以使用哈希表来空间换时间,在建立所有的节点的时候存储新旧节点的对应关系,第二次遍历节点时,直接查表链接到对应的random节点。

更优的方法(细胞分裂法),时间为On,空间为O1.

第一步:克隆细胞,紧紧跟随遍历原链表,每走到一个老节点(比如A),就克隆一个它的影子(A'),然后强行把影子塞到老节点的后面。

  • 原本是:A -> B -> C

  • 裂变后:A -> A' -> B -> B' -> C -> C'(这一步,我们巧妙地把“映射关系”用相对物理位置记录下来了:老节点的下一个,绝对就是它的克隆体

第二步:精准复制 Random 指针现在链表变长了,我们再次从头遍历(每次跳两步,只看老节点)。 假设老节点Arandom指向了老节点C。 那么影子节点A'random应该指向C的影子节点C'翻译成代码就是A.next.random = A.random.next(注意判空)

第三步:完美拆解,现在所有的指针都连好了,我们只需要把这个混合链表,拆成一老一新两个独立的链表。 把A -> B -> C还原,把A' -> B' -> C'拎出来返回。

""" # Definition for a Node. class Node: def __init__(self, x, next=None, random=None): self.val = int(x) self.next = next self.random = random """ class Solution(object): def copyRandomList(self, head): """ :type head: Node :rtype: Node """ if not head: return None cur=head while cur: node=Node(cur.val,cur.next) cur.next=node cur=cur.next.next cur=head while cur and cur.next: if cur.random: cur.next.random=cur.random.next else: cur.next.random=None cur=cur.next.next pre=head new_head=head.next cur=new_head while cur: pre.next=pre.next.next if cur.next: cur.next=cur.next.next else: cur.next=None pre=pre.next cur=cur.next return new_head
http://www.jsqmd.com/news/600813/

相关文章:

  • TurboDiffusion实战案例:从文案到视频,完整创作流程分享
  • ShardingSphere分片算法配置和雪花算法的高可用变种实现细节
  • 告别复杂配置!GLM-4.7-Flash镜像开箱即用,支持OpenAI兼容API
  • Ostrakon-VL像素终端实战:餐饮后厨食材库存图像盘点案例
  • DAMOYOLO-S开发入门:JavaScript前端实现实时视频检测与可视化
  • 从 LLM 到 Agent Skill,龙虾的技术基础 · ⑧ Agent Skill
  • LCD1602液晶显示屏从入门到精通:手把手教你用Arduino驱动显示自定义字符
  • 2026成都痤疮诊疗机构推荐指南 - 优质品牌商家
  • 小白也能用的专业工具:FUTURE POLICE语音字幕对齐体验分享
  • Python Tkinter如何实现下拉选择菜单_使用OptionMenu组件配置选项
  • 【RAG】【vector_stores008】AwaDB向量存储示例
  • 分库分表中间件的选型(ShardingSphere vs MyCat vs Vitess)或全局ID生成方案(雪花算法、Leaf等)
  • OpenClaw技能市场巡礼:10款SecGPT-14B增强安全工具推荐
  • Phi-4-mini-reasoning模型推理加速实践:利用.accelerate库优化性能
  • PyTorch 2.8镜像实际效果:120GB内存支撑千张4K视频帧并行处理实测
  • 嵌入式非阻塞启动画面库:SplashScreen设计与实践
  • FireRedASR-AED-L效果实测:微信语音转文字→长语音断句与上下文连贯性
  • AIGlasses_for_navigation实战案例:便利店视障购物辅助系统搭建全过程
  • ComfyUI Qwen镜像部署与使用:小白也能轻松玩转AI图像生成
  • 手把手教程:用AI股票分析师镜像,一键生成专业股票分析报告
  • HunyuanVideo-Foley在智能家居场景的落地:让智能设备拥有更自然的语音反馈
  • 2026届最火的十大AI科研工具实测分析
  • 怎么处理MongoDB由于分片键基数太低导致无法分割的Chunk_增加复合字段提高基数
  • 从原理图到比特流:手把手解读Vivado里那个神秘的SPI x4配置电路图(附Mode引脚设置对照表)
  • Qwen3智能字幕对齐系统LaTeX学术应用:为学术演讲视频自动生成带公式字幕
  • Element-UI表格进阶玩法:3招让你的Table展开收起更优雅(附完整代码)
  • 告别卡顿!用AutoDL云GPU+VS Code远程开发,5分钟搞定深度学习环境搭建
  • 零基础入门:PyTorch 2.9开箱即用镜像,3步开启云端AI开发
  • csa题目
  • 告别PX4!用APM+Gazebo+SITL在Ubuntu 20.04上从零搭建无人机仿真环境(保姆级排坑实录)