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

Leetcode-138. 复制带随机指针的链表

我们用哈希表来解决这个问题
首先创建一个哈希表,再遍历原链表,遍历的同时再不断创建新节点
我们将原节点作为key,新节点作为value放入哈希表中

image.png

"""# Definition for a Node.class Node:def __init__(self, x: int, next: 'Node' = None, random: 'Node' = None):self.val = int(x)self.next = nextself.random = random"""class Solution:def copyRandomList(self, head: 'Optional[Node]') -> 'Optional[Node]':if not head:  # 关键补充return Noned=dict()p=headwhile p:new_node=Node(p.val,None,None)d[p]=new_nodep=p.nextp=headwhile p:if p.next:d[p].next=d[p.next]if p.random:    d[p].random=d[p.random]p=p.nextreturn d[head]

第一次循环(建映射,创建“影子节点”)

  • p 是原链表的当前节点(原节点对象)

  • 在字典 d 中:

    • key = p(原节点的引用)

    • value = Node(p.val, None, None)(一个新建节点对象的引用)

  • 此时新建节点的 nextrandom 都是 None,所以这些新节点是“孤立点”

例子:
原链表: A → B → C
哈希表:

d[A] = A'(next=None, random=None)
d[B] = B'(next=None, random=None)
d[C] = C'(next=None, random=None)

第二次循环(接指针,补全结构)

  • 目的:把 d[p](新节点)内部的 next / random 指针补好

  • 补 next:

    • 原链表: p.next 是原节点的下一个

    • 新链表: d[p].next 应该指向 d[p.next](下一个原节点对应的新节点)

  • 补 random:

    • 原链表: p.random 是原节点的随机指向

    • 新链表: d[p].random 应该指向 d[p.random](原节点随机指向对应的新节点)

例子(假设 A.random → C):
第二次循环后:

A'.next = B'
B'.next = C'
A'.random = C'

这样,新链表的节点之间关系和原链表完全一致,但对象是全新的。


http://www.dtcms.com/a/328492.html

相关文章:

  • AI智能体的“四大支柱”:CAP框架核心层、执行层、约束层、操作层详解​
  • 手机蓝牙无感开锁在智能柜锁与智能箱包中的整体解决方案
  • Iptables 详细使用指南
  • 10-docker基于dockerfile自动制作镜像
  • 计算机网络摘星题库800题笔记 第5章 传输层
  • Ansible 详细笔记
  • _init__.py的作用
  • 电路板的GND与外壳地EARTH通过电容电阻相连
  • 操作系统1.6:虚拟机
  • 图形设计器-Qt Designer (一)包含 LinuxCNC 小部件
  • 基于LLVM的memcpy静态分析工具:设计思路与原理解析(C/C++代码实现)
  • 浏览器面试题及详细答案 88道(12-22)
  • word——选项自动对齐(针对试卷中选项对齐)
  • 2025牛客暑期多校训练营3(FDJAEHB)
  • SuperMap GIS基础产品FAQ集锦(20250811)
  • 多级库存预警:浪智WMS智慧化系统的实时监控体系
  • 启保停-----------单相照明灯的接法
  • LaTex论文审稿修改
  • Day 10-2: Mini-GPT完整手写实战 - 从组件组装到文本生成的端到端实现
  • Jmeter性能测试过程中遇到connection reset的解决方案
  • 深入解析 React 中的 useRef Hook
  • 【c++】反向赋值:颠覆传统的数据交互范式
  • day49 力扣42. 接雨水 力扣84.柱状图中最大的矩形
  • 《疯狂Java讲义(第3版)》学习笔记ch1
  • 【C#补全计划】StringBuilder
  • dify是什么?
  • 每日任务day0812:小小勇者成长记之挤牛奶
  • 实现一个二维码让 iOS 和 Android 用户自动跳转到对应下载链接
  • Spring中的@Autowired和@Bean有什么区别?
  • 【超详细!题解|两种做法】洛谷P3196 [HNOI2008] 神奇的国度[MCS算法]