复制带有随机指针的链表(通过复制链表实现)

public static Node copyListWithRand2(Node head){
    // 如果头节点为空,直接返回null
    if(head == null){
        return null;
    }

    // 初始化当前节点和下一个节点
    Node cur = head;
    Node next = null;

    // 遍历链表,复制每个节点,并将新节点插入原节点后面
    while (cur != null){
        next = cur.next; // 保存当前节点的下一个节点
        cur.next =new Node(cur.value); // 创建新节点并插入到当前节点后面
        cur.next.next = next; // 将新节点的下一个节点指向原节点的下一个节点
        cur = next; // 移动到下一个节点
    }

    // 重新设置当前节点为头节点
    cur = head;
    Node curCopy = null;
    // 再次遍历链表,处理随机指针
    while (cur != null){
        next = cur.next.next; // 获取当前节点复制后的下一个节点
        curCopy = cur.next; // 获取当前节点的复制节点
        curCopy.rand = cur.rand != null ? cur.rand.next :null; // 设置复制节点的随机指针
        cur =next; // 移动到下一个节点
    }

    // 分离复制链表和原链表
    Node res = head.next; // 复制链表的头节点
    cur = head;
    
    // 遍历链表,恢复原链表的结构
    while (cur != null){
        next =  cur.next.next; // 获取当前节点复制后的下一个节点
        curCopy = cur.next; // 获取当前节点的复制节点
        cur.next = next; // 恢复原链表的结构
        curCopy.next =  next != null ? next.next :null; // 恢复复制链表的结构
        cur = next; // 移动到下一个节点
    }
    return res; // 返回复制链表的头节点
}
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/51420.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大厂面经:京东大数据面试题及参考答案(3万字长文)

目录 Hive窗口函数有什么,什么场景,怎么用 Hive文本拼接函数是什么 Hive的数据存储格式有哪些,优缺点 两个表 join 过程中,空值的情况如何处理? Hive存储结构的区别? Hive本身对于SQL做了哪些优化? Hive分区和分桶区别? Hive分桶表的作用? HBase负载均衡怎么…

智能番茄新鲜度检测系统:基于深度学习的全面实现

基于深度学习的番茄新鲜度检测系统(UI界面YOLOv8/v7/v6/v5代码训练数据集) 引言 番茄是全球广泛种植和消费的蔬菜之一,其新鲜度直接影响其营养价值和口感。传统的番茄新鲜度检测主要依赖于人工观察和经验判断,这不仅费时费力&am…

PHP多功能投票系统源码小程序

🎉决策不再难!「多功能投票小程序」一键搞定所有选择困难症✨ 🤔选择困难?「多功能投票小程序」来救场! 每次聚会、团队讨论还是日常小决策,是不是总有那么几个瞬间让你陷入“选哪个好呢?”的…

自动控制:带死区的PID控制算法

带死区的PID控制算法 在计算机控制系统中,为了避免控制动作过于频繁,消除因频繁动作所引起的振荡,可采用带死区的PID控制。带死区的PID控制通过引入一个死区,使得在误差较小的范围内不进行控制动作,从而减少控制系统的…

将nvim的配置 上传gitee

首先是创建仓库 接着进入这个界面 然后是上传代码, 结果: 可以看到已经是可以了。 然后是 拉取代码进行测试。 第一次 拉取 使用 git clone .(家里) 做一点修改,然后上传。(公司) 然后在git pu…

【ROS2】概念:中级-不同的 ROS 2 中间件供应商

目录 支持的 RMW 实现多种 RMW 实现默认 RMW 实现 ROS 2 构建在 DDS/RTPS 之上,作为其中间件,提供发现、序列化和传输。本文( https://design.ros2.org/articles/ros_on_dds.html )详细解释了使用 DDS 实现和/或 DDS 的 RTPS 有线…

Linux驱动开发——字符设备驱动开发

1 概述 1.1 说明 本文是学习rk3568开发板驱动开发的记录,代码依托于rk3568开发板 1.2 字符设备介绍 字符设备是 Linux 驱动中最基本的一类设备驱动,字符设备就是一个一个字节,按照字节流进行读写操作的设备,读写数据是分先后顺…

用 Manim 库来生成一个树形结构的动画

完整代码: from manim import * class LargeTreeGeneration01(MovingCameraScene): DEPTH 3 CHILDREN_PER_VERTEX 2 LAYOUT_CONFIG {"vertex_spacing": (0.8, 1)} VERTEX_CONF {"radius": 0.12, "color": BLUE_B, "fi…

java基础概念05-运算符

一、自增自减运算符 二、赋值运算符 2-1、注意 三、关系运算符 四、逻辑运算符 4-1、短路逻辑运算符 五、三元运算符 六、运算符的优先级

Catalyst优化器:让你的Spark SQL查询提速10倍

目录 1 逻辑优化阶段 2.1 逻辑计划解析 2.2 逻辑计划优化 2.2.1 Catalys的优化过程 2.2.2 Cache Manager优化 2 物理优化阶段 2.1 优化 Spark Plan 2.1.1 Catalyst 的 Join 策略 2.1.2 如何决定选择哪一种 Join 策略 2.2 Physical Plan 2.2.1 EnsureRequirements 规则 3 相关文…

Linux基本用法(上)

1.计算机主要由 硬件和软件 组成 2.操作系统是什么 ? 有什么作用? 操作系统是软件的一类 主要作用是协助用户调度硬件工作,充当用户和计算机之间的桥梁 3.常见的操作系统有哪些? PC端: Windows,Linux,MacOS 移动端: Android&#xff…

搭建cool-admin-java(前端vue)项目

为什么选择 Cool Admin?​ 随着技术不断地发展,特别是最近 Ai 相关的技术发展,以往的框架已经越来越不能满足现代化的开发需求。 Cool Admin 做为后来者有后发优势,主要特点: Ai 编码,从页面到后端代码&…

数据库实验:SQL Server创建数据库及基本表

一、实验目的: 1、掌握使用SQL SERVER Management Studio工具连接数据库引擎; 2、掌握使用CREATE TABLE 创建基本表的用法; 3、掌握使用ALTER TABLE 修改基本表的用法; 4、掌握使用DROP TABLE删除基本表的用法; 二…

论文解读之Hunyuan-DiT

本次Hunyuan-DiT : A Powerful Multi-Resolution Diffusion Transformer with Fine-Grained Chinese Understanding

姜夔,师法自然的不仕道人

姜夔(ku),字尧章,号白石道人,约生于南宋绍兴二十四年(公元1154年),卒于南宋嘉定十四年(公元1221年),享年67岁。他的艺术成就涵盖了诗词、散文、书…

Rpi Zero W做的老头乐声控灯

祭图__|\0>历经各种尝试,最后选了docker 里装个rhasspy,配上paho-mqtt搞出了这个奇葩夜灯。各种曲折就不说了,直接分享捷径思路。 这个绿板子是respeaker hat with 2 mic 用的是seeed-voicecard,跟着github编译,不…

微信小程序开发(百货商战)实战项目的购物车和个人中心的创建

👨‍💻个人主页:开发者-曼亿点 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 曼亿点 原创 👨‍💻 收录于专栏&#xff1a…

玩转usbserver之usbserver日志报警

一、graylog 介绍 graylog是一个简单易用、功能较全面的日志管理工具,graylog也采用Elasticsearch作为存储和索引以保障性能,MongoDB用来存储少量的自身配置信息,master-node模式具有很好的扩展性,UI上自带的基础查询与分析功能比…

JAVAWeb实战(后端篇)

因为前后端代码内容过多,这篇只写后端的代码,前端的在另一篇写 项目实战一: 1.创建数据库,表等数据 创建数据库 create database schedule_system 创建表,并添加内容 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS 0;-- ---------…

如何安装和使用 Redis

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 关于 Redis Redis,于2009年开发,是一个灵活的、开源的、键值数据存储。在其他NoSQL数据库(如Cassan…