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

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

时间:2023-08-29 21:16:16浏览次数:47  
标签:Node p3 head Offer Random 35 Next 链表

题目链接: 剑指Offer 35. 复杂链表的复制

题目描述:

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

解法思路:

  1. 遍历整个链表,在每个节点的后面,插入一个当前节点的复制,使得 1->2->3 变成 1->1->2->2->3->3

  2. 遍历整个链表,将原节点的random指针也复制到后面的节点上,即 :p.Random.Next = p.Next.Random

  3. 使用一个虚拟节点,将所有复制出来的节点串联在一起,得到原链表的复制
    代码:

/**
 * Definition for a Node.
 * type Node struct {
 *     Val int
 *     Next *Node
 *     Random *Node
 * }
 */

func copyRandomList(head *Node) *Node {
    if head == nil {
        return head
    }
    p1,p2,p3:= head,head,head
    //1.
    for p1 != nil{
        tmp := &Node{ Val: p1.Val, Next: p1.Next, Random: nil }
        p1.Next = tmp
        p1 = p1.Next.Next
    }

    for p2 != nil {
        if p2.Random != nil {
            p2.Next.Random = p2.Random.Next
        }
        p2 = p2.Next.Next
    }
    // 3.
    dummy := head.Next
    tmp := dummy
    for p3 != nil {
        p3.Next = p3.Next.Next
        if p3.Next != nil { tmp.Next = p3.Next.Next }
        p3, tmp = p3.Next, tmp.Next
    }

    return dummy

}

标签:Node,p3,head,Offer,Random,35,Next,链表
From: https://www.cnblogs.com/lxing-go/p/17665841.html

相关文章

  • HashMap链表树化究竟是怎样的?
    网上一直看到两种说法:1.数组长度大于64且当链表长度>8时,链表转换为红黑树;2.数组长度大于64且当链表长度≥8时,链表转换为红黑树。 上源码,主要是putVal()函数/***ImplementsMap.putandrelatedmethods.**@paramhashhashforkey*@paramkeythekey*@par......
  • 教程更新 | RK3568驱动指南第六篇-平台总线
     《iTOP-RK3568开发板驱动开发指南》更新,本次更新内容对应的是驱动(第六期_平台总线_全新升级)视频,后续资料会不断更新,不断完善,帮助用户快速入门,大大提升研发速度。     ✦第一篇驱动基础 第1章前言 1.1学习方法 1.2基础准备 第2章你好!内核源码 2......
  • 手撕代码之链表
    文章目录一、反转链表(leetcode206)二、两个链表的交点(leetcode160)三、链表的中间结点(leetcode876)四、判断链表是否存在环(leetcode141)五、输出链表环的入口结点(leetcode142)六、删除链表中倒数第k个节点(leetcode19)七、合并两个排序链表(leetcode21)八、O(1)时间删除链表中的一个......
  • 快排及链表排序
    文章目录一、普通的快排二、链表的创建三、链表的冒泡排序四、链表快排五、链表归并排序一、普通的快排voidQuickSort(vector<int>&vec,intlow,inthigh){ intpivot=vec[low];//选择第一个元素作为枢纽元 //mid总是指向最后一个比枢纽元小的位置,当需要交换元素时,先......
  • 剑指offer刷题总结
    文章目录一、数组二、链表三、栈和队列四、二叉树五、字符串六、回溯算法七、其他一、数组01、二维数组中的查找06、旋转数组的最小数字12、调整数组顺序使奇数位于偶数前面27、数组中出现次数超过一半的数字29、连续子数组的最大和31、把数组排成最小的数34、数组中的逆序对36、......
  • 小米2平板ubuntu22.04.2 BCM4356无线网卡驱动问题的解决
    以下为你提供在Linux操作系统中BCM4356无线网卡驱动问题的解决方案,针对Ubuntu18.04和Deepinlinux15.8等Linux发行版。 前言目前很多新笔记本电脑的用的是BCM的无线网卡和蓝牙模块集成模块,比如华为MateBook、神舟PcPad、联想多型号,但安装各种最新版的Linux都无法驱动,网......
  • Leetcode 剑指Offer 05. 替换空格(Ti huan kong ge lcof)
    题目链接请实现一个函数,把字符串s中的每个空格替换成"%20"。示例1:输入:s="Wearehappy."输出:"We%20are%20happy."提示:0<=s的长度<=10000思路直接提交returns.replace("","%20"),常用方法信手拈来可不是每个人都能做到的(笑我的思路是首先定义一个leng......
  • 木马样本分析: 99b02a32a9d92c521de94a53dcd93078a357d0e2f26fdeb57735a53fee9b60fa,一
    csharp的类:usingSystem;usingSystem.ComponentModel;usingSystem.Drawing;usingSystem.Windows.Forms;//Token:0x02000009RID:9publicsealedclass\u0006:Form{ //Token:0x06000013RID:19RVA:0x00002464FileOffset:0x00000664 public\u0006......
  • 剑指 Offer 19. 正则表达式匹配(困难)
    题目:classSolution{public:boolisMatch(strings,stringp){intm=s.size()+1,n=p.size()+1;vector<vector<bool>>dp(m,vector<bool>(n,false));//设动态规划矩阵dp,dp[i][j]代表字符串s的前i个字dp[0][0]=......
  • 876 , 链表的中间节点
    https://leetcode.cn/problems/middle-of-the-linked-list/ 使用快慢指针1lassSolution{2publicListNodemiddleNode(ListNodehead){3//排除为空情况4if(head==null){5returnnull;6}7//使用......