首页 > 其他分享 >剑指 Offer 35. 复杂链表的复制

剑指 Offer 35. 复杂链表的复制

时间:2023-05-18 15:24:34浏览次数:40  
标签:Node cur Offer random 35 next 链表 节点

题目描述:

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

 

 

 

 

提示:

  • -10000 <= Node.val <= 10000
  • Node.random 为空(null)或指向链表中的节点。
  • 节点数目不超过 1000 。

解题思路:

本题链表的节点定义如下:

// Definition for a Node.
class Node {
    int val;
    Node next, random;
    public Node(int val) {
        this.val = val;
        this.next = null;
        this.random = null;
    }
}

 

 本题难点: 在复制链表的过程中构建新链表各节点的 random 引用指向。

 

利用哈希表的查询特点,考虑构建 原链表节点 和 新链表对应节点 的键值对映射关系,再遍历构建新链表各节点的 next 和 random 引用指向即可。

 

 

class Solution{
    public Node copyRandomList(Node head){
        if(head == null) return null;
        Node cur = head;
        Map<Node ,Node> map = new HashMap<>();
        // 3. 复制各节点,并建立 “原节点 -> 新节点” 的 Map 映射
        while(cur!=null){
            map.put(cur,new Node(cur.val));
            cur=cur.next;
        }
        cur=head;
        // 4. 构建新链表的 next 和 random 指向
        while(cur!=null){
            map.get(cur).next = map.get(cur.next);
            map.get(cur).random = map.get(cur.random);
            cur = cur.next;
        }
        // 5. 返回新链表的头节点
        return map.get(head);
    }
}

 

标签:Node,cur,Offer,random,35,next,链表,节点
From: https://www.cnblogs.com/zhz123567/p/17412036.html

相关文章

  • 35基于java的校园二手交易系统或跳蚤市场设计与实现
    基于java的校园二手交易系统或跳蚤市场设计与实现,可适用于二手交易平台,二手商城,交易商城,大学生交易平台,购物平台,大学生跳蚤平台等等项目概述随着网络技术的发展,在线购物越来越流行。目前,大学生特别是毕业生的闲置物品很多,很多可以重复使用,但不方便携带。目前市场上针对大学生......
  • LC206. 反转链表
    Q:给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例:示例1:输入:head=[1,2,3,4,5]输出:[5,4,3,2,1]示例2:输入:head=[1,2]输出:[2,1]示例3:输入:head=[]输出:[]提示:链表中节点的数目范围是 [0,5000]-5000<=Node.val<=5000A:思路:该题属于简......
  • 八大常见的数据结构(一)数组、链表、栈、队列
    1、数组数组是用于储存有限个相同类型数据的集合。数组中的各元素的存储是有先后顺序的,它们在内存中按照这个先后顺序连续存放在一起。可通过数组名和下标进行数据的访问和更新。下标从0开始。2、链表链表是一种物理存储单元上非连续、非顺序的存储结构。链表相较于数组,......
  • #yyds干货盘点# LeetCode程序员面试金典:相交链表
    1.简述:给你两个单链表的头节点 headA和headB,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回null。图示两个链表在节点c1开始相交:题目数据保证整个链式结构中不存在环。注意,函数返回结果后,链表必须保持其原始结构。自定义评测:评测系统的输入......
  • abc235_d Multiply and Rotate 题解
    MultiplyandRotate题意给定两个整数\(a\)和\(n\),有一个整数\(x\),初始值为\(1\),有两种操作:将\(x\)变成\(x\timesa\)。在\(x>10\)且\(x\)不是十的倍数的情况下可以执行此操作:将\(x\)当成一个字符串,将其循环右移一次。求最少执行多少次操作能把\(x\)变......
  • 光伏逆变器总控板,TMS320F28335,2路CAN通讯,2路485通讯,1个EEROM,2路AD采样电路。
    光伏逆变器总控板,TMS320F28335,2路CAN通讯,2路485通讯,1个EEROM,2路AD采样电路。主要功能为采样光伏电池电压,MPPT最大功率跟踪,功率计算,系统开关机等。并且有对应的元器件明细表。提供程序代码。特产适合做此类项目的工程师参考,或者新手作为模板参考。备注:公司成熟产品,提供代码!ID:92566......
  • 量产20KW三相三电平光伏逆变器项目 主控平台:TMS320F28335+T
    量产20KW三相三电平光伏逆变器项目主控平台:TMS320F28335+TM320F28035逆变拓扑:双路光伏BOOST+三相三电平逆变功能:并网发电,双路高精度MPPT;描述:本方案适用于户用光伏系统,本方案主控采用主控TMS320F28335+TM320F28035ID:6168616129047088......
  • 7935: 最大值问题 单调队列
    描述 给定n个正整数,crq先选了第1~k个数,要求yuyu求出最大值,yuyu轻松完成,crq直接甩出一堆,要求第2~k+1个,3~k+2个,...,n-k+1~n个,全部都求出来,之后便轻松休息了。  输入 第一行两个整数 n和k(1≤k≤n≤106)。第二行 n个整数,表示编号1~n方格中的数字ai(1≤ai≤3×107)。......
  • 剑指 Offer 31. 栈的压入、弹出序列
    题目描述:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列{1,2,3,4,5}是某栈的压栈序列,序列{4,5,3,2,1}是该压栈序列对应的一个弹出序列,但{4,3,5,1,2}就不可能是该压栈序列的弹出序列。  ......
  • Row size too large. The maximum row size for the used table type, not counting B
    问题描述新建表或者修改表varchar字段长度的时候,出现这个错误Rowsizetoolarge.Themaximumrowsizefortheusedtabletype,notcountingBLOBs,is65535.Thisincludesstorageoverhead,checkthemanual.YouhavetochangesomecolumnstoTEXTorBLOBs......