首页 > 其他分享 >每日一练——随机链表的复制

每日一练——随机链表的复制

时间:2024-06-14 11:32:07浏览次数:10  
标签:Node cur random next 链表 复制 随机 newnode struct

138. 随机链表的复制 - 力扣(LeetCode)

关键点:通过“相互插入”式的复制方法来把源链表和目标链表的random联系起来。 

 

/**
 * Definition for a Node.
 * struct Node {
 *     int val;
 *     struct Node *next;
 *     struct Node *random;
 * };
 */

typedef int LDataType;
typedef struct Node Node;
 
Node* BuyNode(LDataType x)
{
    Node* newnode = (Node*)malloc(sizeof(Node));
    if (NULL == newnode)
    {
        perror("malloc failed");
        exit(-1);
    }
    newnode->val = x;
    newnode->next = NULL;
    newnode->random = NULL;
    return newnode;
}


struct Node* copyRandomList(struct Node* head)
{
    if (NULL == head)
        return NULL;
    // 穿插复制
    struct Node* cur = head;
    while (cur)
    {
        struct Node* newnode = BuyNode(cur->val);
        newnode->next = cur->next;
        cur->next = newnode;
        cur = newnode->next;
    }
    // 处理random
    cur = head;
    while (cur)
    {
        if (cur->random)
            cur->next->random = cur->random->next;
        cur = cur->next->next;
    }
    // 拆开
    cur = head;
    struct Node* copyhead = head->next;
    struct Node* copy = copyhead;
    while (1)
    {
        cur->next = copy->next;
        cur = cur->next;
        if (NULL == cur)
        {
            copy->next = NULL;
            break;
        }
        copy->next = cur->next;
        copy = copy->next;
    }
    return copyhead;
}

标签:Node,cur,random,next,链表,复制,随机,newnode,struct
From: https://blog.csdn.net/weixin_73483158/article/details/139623524

相关文章

  • 带头+双向+循环链表的实现
    目录1.链表1.1带头双向循环链表2.链表的实现2.1结构体2.2初始化2.3打印2.4判断空不能删2.5尾插2.6头插2.7尾删2.8头删2.9查找2.10在pos之前插入2.11删除pos位置的值2.12销毁2.13创建节点3.test主函数4.List.c文件5.List.h文件1.链表1.1带头......
  • 单向链表————遍历、查找、插入结点 (基于C语言实现)
    #include<stdio.h>#include<stdbool.h>#include<stdlib.h>#include<stdbool.h>//指的是单向链表中的结点有效数据类型,用户可以根据需要进行修改typedefintDataType_t;//构造链表的结点,链表中所有结点的数据类型应该是相同的typedefstructLinkedList{Dat......
  • C语言数据结构实现-静态链表2-基本操作
    上节,我们初步创建了一个静态链表,本节学习有关静态链表的一些基本操作,包括对表中数据元素的添加、删除、查找和更改。本节是建立在已能成功创建静态链表的基础上,因此我们继续使用上节中已建立好的静态链表学习本节内容,建立好的静态链表如图1所示:静态链表添加元素例如,在图1......
  • R:microtable包随机森林
    rm(list=ls())setwd("C:\\Users\\Administrator\\Desktop\\New_microtable")#设置工作目录library(microeco)library(magrittr)library(dplyr)library(tibble)feature_table<-read.table('Bac_species.txt',header=TRUE,row.names=......
  • C语言数据结构实现-静态链表1-初始化
    《顺序表和链表优缺点》一节,我们了解了两种存储结构各自的特点,那么,是否存在一种存储结构,可以融合顺序表和链表各自的优点,从而既能快速访问元素,又能快速增加或删除数据元素。静态链表,也是线性存储结构的一种,它兼顾了顺序表和链表的优点于一身,可以看做是顺序表和链表的升级版。使......
  • 线性表的链式表示——链表
    目录一、单链表1、单链表的定义2、单链表的基本操作 (1)单链表的初始化(2)插入操作(3)删除操作(4)查找操作(5)求表长操作(6)单链表的建立 二、双链表三、循环链表 1、循环单链表2、循环双链表四、静态链表 五、顺序表和链表的比较1、存取方式2、逻辑结构与物理结构3......
  • 如何使用 Midjourney换脸,将一个人面部复制并粘贴到任意人身上
    嘿,想不想将一个人的面部随意粘贴到任意人身上?现在开始教学如何使用Discord中的MidjourneyBot实现,这就是“COPYAFACE”这个超酷的功能,它能帮你一键把脸贴到任何图片上。用到的是一个叫“InsightFace”的开源Discord机器人,它和Midjourney是好搭档哦。为什么我们用这个功......
  • 远程服务器不能复制粘贴解决方法
    主要有两种情况:1、复制粘贴功能原本可以用,突然失灵了2、从头到尾都无法使用这个复制粘贴功能 针对第一种情况,只需重启一下rdpclip.exe就可以了   针对第二种情况,步骤:1、打开任务管理器,查看进程,如果有rdpclip.exe(有可能是RDP剪贴板监视程序)进程,先关闭该进程 2、开......
  • Android studio 自动复制生成的 apk
    KTS脚本//顶层build.gradle.ktsvalapkBaseName:String="VoiceAssistant"allprojects{project.extra.apply{set("apkBaseName",apkBaseName)}}//模块build.gradle.ktsandroid{ applicationVariants.all{......
  • 21. 合并两个有序链表
    题目链接一、题目描述1.题目将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。2.示例示例1:输入:l1=[1,2,4],l2=[1,3,4]输出:[1,1,2,3,4,4]示例2:输入:l1=[],l2=[]输出:[]示例3:输入:l1=[],l2=[0]输出:[0]......