[leetcode]Copy List with Random Pointer

2023-10-26

解题思路1:
一个深度的 copy。
1,如果只有next,那就好办了,一个挨着一个的copy就好
2,这里有random,最理想的就是 random指哪儿,我们就知道那里对应的copy在哪儿。 这个对应,就是map,立刻想到的就是hashmap 

/**
 * Definition for singly-linked list with a random pointer.
 * class RandomListNode {
 *     int label;
 *     RandomListNode next, random;
 *     RandomListNode(int x) { this.label = x; }
 * };
 */
public class Solution {
    public RandomListNode copyRandomList(RandomListNode head) {
        if (head == null) return head;
        Map<RandomListNode, RandomListNode> mapper = new HashMap<>();

        RandomListNode it = head;
        while(it != null){
            mapper.put(it, new RandomListNode(it.label) );

            it = it.next;
        }

        it = head;
        while(it != null){
            RandomListNode copy = mapper.get(it);
            copy.next = mapper.get(it.next);
            copy.random = mapper.get(it.random);

            it = it.next;
        }
        return mapper.get(head);
    }
}

解题思路2:
1,这里参考网上的方法,直接把copy放在原node的后面,最后再拆链。
总体来看,也是为了 找到 random指向的copy。
2,注意一点,random pointer是可以指向 null的。如果面试官没有说,你也要问。
上面的解法中,hashMap.get(it.random)不用考虑这个问题,因为 hashMap.get(null) 返回还是null 
public class Solution {
    public RandomListNode copyRandomList(RandomListNode head) {
        if (head == null) return head;

        RandomListNode it = head;
        while(it != null){
            RandomListNode copy = new RandomListNode(it.label);
            copy.next = it.next;

            it.next = copy;
            it = copy.next;
        }

        it = head;
        while( it != null){
            RandomListNode copy = it.next;
            copy.random = (it.random != null) ? it.random.next : null;
            it = copy.next;
        }

        RandomListNode dummy = new RandomListNode(0);
        RandomListNode p = dummy;
        it = head;
        while( it != null ){
            RandomListNode copy=it.next;
            p.next = copy;
            it.next = copy.next;
            it = it.next;
            p = p.next;
        }
        return dummy.next;
    }
}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[leetcode]Copy List with Random Pointer 的相关文章

随机推荐

  • [npm] npx 介绍与使用说明

    npm npx 介绍与使用说明 npm 的由来 npx 是什么 npx 特点 npx 的特点 项目安装包的使用 全局安装包的避免 指定工具包版本 no install 参数和 ignore existing 参数 使用不同版本的 node
  • linux开启vt虚拟化,VT虚拟化如何开启

    VT虚拟化如何开启 VT是什么意思 VT虚拟化怎么开启呢 下面小编为大家分享VT虚拟化开启技巧 欢迎大家参考 VT是什么意思 VT是英文virtualizationtechnology的缩写 其意思是CPU虚拟化技术 我们安装的手游助手就是
  • 【机器学习】如何根据数据集选择适合的模型

    Is it because we have many features in our data sheet 因为我们的数据表中有很多特征吗 Or is it because the feature list does not only co
  • SpringBoot(四)SpringBoot搭建简单服务端

    通过之前的几篇文章相信大家已经对SpringBoot项目开发有了一个基本的了解 本篇 介绍下如何使用SpringBoot搭建一个简单的服务端 实现一个新用户注册的场景 供前端和移动端去使用 本篇需要你对SpringBoot的starter
  • Windows常用命令整理

    之前写了一篇关于Windows快速打开服务 陌客依天涯的博客 CSDN博客 服务快捷键 的文章 有表示windows还有很多常用的 那就整理一下 分享跟多点 希望对大家有用 1 mstsc 快速开启远程连接客户端 2 regedit 快速打
  • 节流防抖详解及代码实现

    防抖 原理 在事件被触发n秒后再执行回调 如果在这n秒内又被触发 则重新计时 适用场景 按钮提交 防止多次提交按钮 只执行最后提交的一次 搜索框联想 防止联想发送请求 只发送最后一次输入 防抖小例子
  • C++打开特定编码格式的文件(utf-8)

    FileEncoding cpp 定义控制台应用程序的入口点 include stdafx h include
  • 具身智能综述和应用(Embodied AI)

    什么是具身智能 目前人工智能的进展 在诸多数据源和数据集 Youtube Flickr Facebook 机器计算能力 CPU GPU TPU 的加持下 已经在CV NLP上取得了许多任务 如目标检测 语义分割等 的重大进展 但目前大部分深
  • 一定要先看!Kubernetes+KubeSphere+DevOps的安装与踩坑

    1 安装 本人于2020 9安装的k8s 不同时间段的官方资料会有变动 从而使初学者很抓狂 比如链接404等 所以一定要先看我这篇 尽量一次全部安装成功 不然重装又会出现许多疑难杂症 官方安装文档 首先 我按照文档一步一步操作 前面都没有问
  • 一手好SQL是如何练成的

    一手好SQL是如何练成的 一 Mysql性能 1 1 最大数据量 1 2 最大并发数 1 3 查询耗时0 5秒 1 4 实施原则 二 数据表设计 2 1 数据类型 2 1 避免空值 2 2 text类型优化 三 索引优化 3 1 索引分类
  • 怎么解决java.lang.NoClassDefFoundError错误

    怎么解决java lang NoClassDefFoundError错误 ClassNotfoundException VS NoClassDefFoundError ClassNotfoundException时在编译时JVM加载不到类或
  • Revit API 开发 (2): 显示选中的图元(element)

    如何创建一个Revit AddIn 项目参考 Revit API 开发 1 Hello World 重载IExternalCommand的Execute方法 通过UIApplication ActiveUIDocument Selectio
  • 连接数据库时,出现报错pymysql.err.OperationalError: (2003,“Can‘t connect to MySQL server

    问题 连接数据库时 出现报错pymysql err OperationalError 2003 Can t connect to MySQL server on mtisp m dbsit sfcloud local Errno 10109
  • python读写复制文件

    python读写复制文件 1 读取文件 打开文件 fo open D LPE E python python index txt r print 文件名为 fo name line fo read print 读取的内容 s line 关闭
  • Hudi:初识Hudi

    是什么 Hudi是什么 可以说Hudi是一个数据湖或是数据库 但它又不是数据湖或是数据库 笔者理解为Hudi是除开计算引擎的Hive 众所周知 Hive是一个计算框架 但是现在我们更多的是使用Spark基于Hive对HDFS中文件提供的Sc
  • C++实现在文件中输入26个英文字母

    步骤一 检查文件是否存在 如果不存在就创建文件 步骤二 在文件中输入26个英文字母 首先要了解如何输出26个英文字母 方法如下 include
  • Nginx 配置文件结构解析

    nginx配置文件路径 不同安装方式 nginx的文件存放路径也有所不同 源码安装配置文件路径 在安装目录下的conf目录下 比如我的安装目录是 usr local nginx 那么他的配置文件就在 usr local nginx conf
  • 【Unity & Mecanim】Avatar基础

    什么是 Mecanim Mecanim 是集成到 Unity 中的动画软件的名称 unity集成的动画系统 由于人形骨架在骨骼结构上的相似性 用户可以将动画效果从一个人形骨架映射到另一个人形骨架 从而实现动画重定向功能 除了极少数情况之外
  • python有类似spring_据说比Spring快44倍的web开发框架

    据说比 该框架称为 light 4j 官方网站简介 A fast lightweight and more productive microservices framework 很简单 翻译过来就是 一个快速 轻量级和更高效的微服务框架 为
  • [leetcode]Copy List with Random Pointer

    解题思路1 一个深度的 copy 1 如果只有next 那就好办了 一个挨着一个的copy就好 2 这里有random 最理想的就是 random指哪儿 我们就知道那里对应的copy在哪儿 这个对应 就是map 立刻想到的就是hashmap