iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java复杂链表的复制详解
  • 206
分享到

Java复杂链表的复制详解

2024-04-02 19:04:59 206人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录1.题目2.解法2.1 拼接+拆分3.代码1.题目 请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,

1.题目

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

题目来源:力扣(LeetCode

链接:https://leetcode-cn.com/problems/fu-za-lian-biao-de-fu-zhi-lcof

2.解法

2.1 拼接+拆分

首先我们逐个将节点复制并且和原来的链表连起来得新链表;

然后再构建新链表的random 指向。当访问原节点 cur 的随机指向节点 cur.random 时,对应新节点 cur.next 的随机指向节点为 cur.random.next 

将得到的新链表之间的复制节点拆分出来连成一个复制链表,拆分成原链表和复制链表。

链表图

 复制节点

 将复制节点的random.next 连接起来

 拆分成两个链表

3.代码


class Solution {
    public node copyRandomList(Node head) {
        if(head == null) {
            return null;
        }        
        //1.复制各个链表,并连接
        Node cur = head;
        while (cur != null) {
            //复制
            Node prev = new Node(cur.val);
            prev.next = cur.next;
            //连接
            cur.next = prev;
            //往后走
            cur = prev.next;
        }
        //2.构建各新节点的random 指向
        cur = head;
        while (cur != null) {
            if (cur.random != null) {
                cur.next.random = cur.random.next;
            }
            cur = cur.next.next;
        }
        //3.拆分复制的链表
        cur = head.next;
        Node node = head;
        Node nodeNext = head.next;
        while (cur.next != null) {
            node.next = node.next.next;
            cur.next = cur.next.next;
            node = node.next;
            cur = cur.next;
        }
        node.next = null;//尾节点
        return nodeNext;//返回新链表的头结点
    }
}

到此这篇关于Java复杂链表的复制详解的文章就介绍到这了,更多相关Java 复杂链表内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java复杂链表的复制详解

本文链接: https://www.lsjlt.com/news/163709.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java复杂链表的复制详解
    目录1.题目2.解法2.1 拼接+拆分3.代码1.题目 请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,...
    99+
    2024-04-02
  • C语言复杂链表的复制实例详解
    目录一、题目描述示例1:示例2:示例3:示例4:二、思路分析三、整体代码总结一、题目描述 请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一...
    99+
    2024-04-02
  • java算法题解LeetCode35复杂链表的复制实例
    目录题目示例 1:示例 2:示例 3:示例 4:解题思路题目 AC 剑指 Offer 35. 复杂链表的复制请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中...
    99+
    2023-01-05
    java算法复杂链表复制 java LeetCode
  • C语言如何复制复杂链表
    这篇文章主要讲解了“C语言如何复制复杂链表”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言如何复制复杂链表”吧!什么是复杂链表?复杂链表指的是一个链表有若干个结点,每个结点有一个数据域用...
    99+
    2023-06-16
  • Java复杂链表的示例分析
    这篇文章将为大家详细讲解有关Java复杂链表的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.题目请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 ...
    99+
    2023-06-28
  • Java面试题-实现复杂链表的复制代码分享
    阿里终面在线编程题,写出来与大家分享一下        有一个单向链表,每个节点都包含一个random指针,指向本链表中的某个节点或者为空,写一个深度拷贝函数,拷贝整个链...
    99+
    2023-05-31
    java 链表 ava
  • Java时间复杂度、空间复杂度的深入详解
    目录算法效率时间复杂度什么是时间复杂度推导大 O 阶的方法算法情况计算冒泡排序的时间复杂度计算二分查找的时间复杂度计算阶乘递归的时间复杂度计算斐波那契递归的时间复杂度空间复杂度计算冒...
    99+
    2024-04-02
  • Java 浅复制和深复制的实例详解
    Java 浅复制和深复制的实例详解1 浅复制和深复制区别浅复制:浅复制只是复制本对象的原始数据类型,如int、float、String,对于数组和对象引用等是不会复制的。因此浅复制是有风险的。深复制:不但对原始数据类型进行复制,对于对象中的...
    99+
    2023-05-31
    java 浅复制 深复制
  • Java 数据结构之时间复杂度与空间复杂度详解
    目录算法效率时间复杂度什么是时间复杂度推导大 O 阶的方法算法情况计算冒泡排序的时间复杂度计算二分查找的时间复杂度计算阶乘递归的时间复杂度计算斐波那契递归的时间复杂度空间复杂度计算冒...
    99+
    2024-04-02
  • Java easyExcel的复杂表头多级表头导入
    目录首先要了解下面导入文件一块的代码有的人说 如果我是不固定的表头怎么办呢?总结首先要了解 easyExcel怎么获取表头 直接贴代码就不废话了 import com.alibab...
    99+
    2024-04-02
  • C语言数据结构之复杂链表的拷贝
    题目: 给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 ...
    99+
    2024-04-02
  • Java 精炼解读时间复杂度与空间复杂度
    目录前言:一、算法效率二、时间复杂度1.时间复杂度概念2.大O的渐进表示法计算时间复杂度  三、空间复杂度 总结:前言: 所谓的复杂度就是衡量算法的效率,衡量算发...
    99+
    2024-04-02
  • PostgreSQL 复制表的 5 种方式详解
    目录CREATE TABLE AS SELECT 语句CREATE TABLE LIKE 语句CREATE TABLE AS TABLE 语句SELECT INTO 语句CREATE TABLE INHERITS...
    99+
    2023-01-18
    PostgreSQL复制表 PostgreSQL复制表方式
  • PostgreSQL复制表的5种方式详解
    目录CREATE TABLE AS SELECT 语句CREATE TABLE LIKE 语句CREATE TABLE AS TABLE 语句SELECT INTO 语句CR...
    99+
    2023-01-18
    PostgreSQL 复制表 PostgreSQL 复制表方式
  • PHP 数组和链表的算法时间复杂度比较
    数组和链表的算法时间复杂度比较:访问数组 o(1),链表 o(n);插入数组 o(1),链表 o(1)/o(n);删除数组 o(1),链表 o(n);搜索数组 o(n),链表 o(n)。...
    99+
    2024-05-07
    php 数组 链表
  • Python基础详解之列表复制
    目录一、前言二、直接赋值三、用切片赋值四、copy()复制实现赋值五、deepcopy()复制实现赋值六、copy()和deepcopy()的区别6.1  copy()6....
    99+
    2024-04-02
  • C语言详细解析时间复杂度与空间复杂度
    目录一、概念1.1、算法效率1.2、时间复杂度1.3、空间复杂度二、计算2.1、大O的渐进表示法2.2、时间复杂度计算2.3、空间复杂度计算三、有复杂度要求的习题一、概念 1.1、算...
    99+
    2024-04-02
  • java 中复合机制的实例详解
    java 中复合机制的实例详解继承的缺陷继承的缺陷是由它过于强大的功能所导致的。继承使得子类依赖于超类的实现,从这一点来说,就不符合封装的原则。一旦超类随着版本的发布而有所变化,子类就有可能遭到破坏,即使它的代码完全没有改变。为了说明的更加...
    99+
    2023-05-31
    java 复合 ava
  • Oracle解析复杂json的方法实例详解
    问题背景:          当前在Oracle数据库(11G之前的版本)解析json没有可以直接使用的系统方法,网上流传的P...
    99+
    2024-04-02
  • arthas jprofiler做复杂链路的调用分析
    目录背景1. arthas采样生成jfr文件2. 下载jfr到本地3. jprofiler分析3.1 打开快照3.2 反向分析3.3 分析结果总结背景 Arthas是阿里巴巴开源的应...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作