首页 > 其他分享 >138. 复制带随机指针的链表

138. 复制带随机指针的链表

时间:2023-04-04 15:24:03浏览次数:41  
标签:Node val auto random next 链表 138 指针

/*
// Definition for a Node.
class Node {
public:
    int val;
    Node* next;
    Node* random;
    
    Node(int _val) {
        val = _val;
        next = NULL;
        random = NULL;
    }
};
*/

class Solution {
public:
    Node* copyRandomList(Node* head) {
        if(!head)   return NULL;
        for(auto p=head;p;p=p->next->next)//复制小弟
        {
            auto t=new Node(p->val);
            t->next=p->next;
            p->next=t;
        }
        for(auto p=head;p;p=p->next->next)//复制random
            if(p->random)
                p->next->random=p->random->next;
        //抽出链表
        auto dummy=new Node(-1),tail=dummy;
        for(auto p=head;p;p=p->next)
        {
            //将小弟节点插入新链表
            auto new_node=p->next;
            tail=tail->next=new_node;
            //将原链表恢复
            p->next=p->next->next;
        }
        return dummy->next;
    }
};

标签:Node,val,auto,random,next,链表,138,指针
From: https://www.cnblogs.com/tangxibomb/p/17286510.html

相关文章

  • 链表练习3
    已知整型链表,设计算法,在所有结点值为x的结点前插入结点值为y的结点,插入的结点个数通过函数值返回。#include<stdio.h>#include<stdlib.h>typedefstructnode{//用Node代替structnodeinta;structnode*next;}Node,*LinkList;LinkListcreate();Link......
  • 复杂链表的复刻
    暴力做法时间复杂度 O(n^2)遍历一遍,复制next指针,新建链表遍历第二遍,复制random指针,查找每一个random节点的位置classSolution{public:ListNode*copyRandomList(ListNode*head){ListNode*dummy=newListNode(-1),*tail=dummy;if(!hea......
  • 快慢指针-leetcode27移除元素
    给你一个数组nums和一个值val,你需要原地移除所有数值等于val的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用O(1)额外空间并原地修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。说明:为什么返回数值是整数,但输......
  • 快慢指针-leetcode-26
    题目描述:给定一个已经排序好的数组,删除重复的元素,使每个元素只出现一次,并返回新的数组长度。不要为另一个数组分配额外的空间,必须采用O(1)额外内存复杂度的原地算法来解决这个问题。示例1:输入:nums=[1,1,2]输出:length=2,nums=[1,2]解释:函数应该返回新的长度2,......
  • 最长连续序列(并查集、数组)、复原 IP 地址(字符串、回溯)、删除链表的倒数第 N 个结
    最长连续序列(并查集、数组)给定一个未排序的整数数组nums,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。请你设计并实现时间复杂度为O(n)__的算法解决此问题。示例1:输入:nums=[100,4,200,1,3,2]输出:4解释:最长数字连续序列是[1,2,3,4]。它的长度为4......
  • C语言逆向——指针
    指针类型在C语言里面指针是一种数据类型,是给编译看的,也就是说指针与int、char、数组、结构体是平级的,都是一个类型。带"*"号的变量我们称之为指针类型,例如:char*x;short*y;int*a;float*b;...任何类型都可以带这个符号,格式就是:类型*名称;星号可以是多个。指针变量......
  • 环形链表
    给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数pos来表示链表尾连接到链表中的位置(索引从0开始)。如果pos......
  • 带环的单链表追击之拓展证明
    对于单链表有环问题,上一期,我们已经详细讲解了!!而快慢指针功不可没!!对于本期我们再次回顾,链表有环问题时,不难心中存在一个疑问,一定能追得上吗?会不会错过??那么为什么??为何能追上,什么情况下会追不上!!这就是我们今天讨论的重点!!假设单链表有环,快指针每次走两步,而慢指针每次走一步!!那么,快慢指......
  • IDEA Spring-boot 使用@Component注解的工具类,用@Autowired注入 @Service或者@Reposit
    IDEASpring-boot使用@Component注解的工具类,用@Autowired注入@Service或者@Repository会空指针(使用@PostContruct)原文链接:https://blog.csdn.net/ld_secret/article/details/104627597/使用idea编译器时,对于spring-boot的项目,大都使用注解,那么:一、现象:@Component标注的U......
  • C++this指针
    C++只有非静态成员变量才属于类的对象上在C++中,类内的成员变量和成员函数分开存储,只有非静态成员变量才属于类的对象上首先看一下空对象占多少空间classFoo{};intmain(){Foofoo;cout<<"sizeofis:"<<sizeof(foo)<<endl;}结果为sizeofp=1;......