C语言每日一题:14《数据结构》复制带随机指针的链表

题目一:

请添加图片描述
题目链接:

思路一:

找相对位置暴力求解的方法:
1.复制一个新的链表出来遍历老的节点给新的节点赋值,random这个时候不去值。
2.两个链表同时遍历,遍历老链表的时候去寻找相对位置,在遍历新的链表找到随机值赋值。

struct Node* copyRandomList(struct Node* head) {struct Node* cur=head;struct Node* newhead=NULL,*tile=NULL;//复制原来的链表数据while(cur){//开辟新的节点struct Node* newnode=(struct Node*)malloc(sizeof(struct Node));newnode->val=cur->val;newnode->next=NULL;newnode->random=NULL;if(newhead==NULL){tile=newhead=newnode;}else{tile->next=newnode;tile=tile->next;}cur=cur->next;}//进行两个的循环遍历,找相对位置cur=head;struct Node* cur2=newhead;int pos=0;while(cur){//更新一下pospos=0;//cur的随机值是哪一个struct Node* find=cur->random;if(find==NULL){cur2->random=NULL;cur=cur->next;cur2=cur2->next;continue;}else{struct Node* curold=head;while(curold){if(find==curold){break;}pos++;curold=curold->next;}}//寻找随机节点struct Node* curnew=newhead;while(pos){curnew=curnew->next;pos--;}cur2->random=curnew;//循环条件cur=cur->next;cur2=cur2->next;}return newhead;
}

思路二:

请添加图片描述

struct Node* copyRandomList(struct Node* head) {struct Node* cur = head, * tile = NULL;//新的链表赋值插入,cur为空才结束插入while (cur){//保存下一个老的tile = cur->next;struct Node* newnode = (struct Node*)malloc(sizeof(struct Node));newnode->val = cur->val;cur->next = newnode;newnode->next = tile;//循环条件cur = tile;}//给copy链表赋值randomstruct Node* copy = NULL;cur = head;tile = NULL;while (cur){//连接了新的节点copy = cur->next;tile = copy->next;//给random赋值,随机值,正常值的两个情况if (cur->random == NULL){copy->random = NULL;}else{copy->random = cur->random->next;}//循环的移动cur = tile;}copy = NULL;cur = head;tile = NULL;//分离链表struct Node* newhead = NULL;struct Node* move = NULL;while (cur){copy = cur->next;tile = copy->next;if (newhead == NULL){newhead = copy;move = newhead;}else{move->next = copy;move = move->next;}//恢复原来的节点cur->next = tile;//循环遍历cur = tile;}return newhead;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/77528.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

压力测试与测试工具jmeter的介绍

目录 一、性能指标 二、jmeter (一)JMeter 安装 (二)JMeter 压测示例 1、添加线程组 2、添加 HTTP 请求 3、添加监听器 4、启动压测&查看分析结果 (三)JMeter Address Already in use 错误解决 压力测…

c++11 标准模板(STL)(std::basic_ofstream)(四)

定义于头文件 <fstream> template< class CharT, class Traits std::char_traits<CharT> > class basic_ofstream : public std::basic_ostream<CharT, Traits> 类模板 basic_ofstream 实现文件上基于流的高层输出操作。它将 std::basic_ost…

HTML5 Canvas(画布)

<canvas>标签定义图形&#xff0c;比如图表和其他图像&#xff0c;你必须用脚本来绘制图形。 在画布上&#xff08; Canvas &#xff09;画一个共红色矩形&#xff0c;渐变矩形&#xff0c;彩色矩形&#xff0c;和一些彩色文字。 什么是 Canvas&#xff1f; HTML5<c…

亚马逊买家账号ip关联怎么处理

对于亚马逊买家账号&#xff0c;同样需要注意IP关联问题。在亚马逊的眼中&#xff0c;如果多个买家账号共享相同的IP地址&#xff0c;可能会被视为潜在的操纵、违规或滥用行为。这种情况可能导致账号受到限制或处罚。 处理亚马逊买家账号IP关联问题&#xff0c;建议采取以下步骤…

数学知识(三)

一、容斥原理 #include<iostream> #include<algorithm>using namespace std;const int N 20;typedef long long LL; int n,m; int p[N];int main() {cin>>n>>m;for(int i 0;i < m;i ) cin>>p[i];int res 0;//从1枚举到2^m(位运算)for(int …

burp suite 2023版 模块详解《一》

burp suite2023版 模块详解<一> Brup suite 仪表盘、目标、代理模块详解 dashboard&#xff08;仪表盘&#xff09;&#xff1a; Burp Suite的dashboard是一个总览视图&#xff0c;显示有关目标和代理的重要信息。我们可以在仪表板上查看最近操作的概要、目标的状态和代…

centos 7镜像(iso)下载图文教程(超详细)

声明&#xff1a;本教程为本人学习笔记&#xff0c;仅供参考 文章目录 前言一、阿里云镜像站下载centos 7 二、清华源下载centos 7小结 前言 声明&#xff1a;本教程为本人学习笔记&#xff0c;仅供参考 本教程将提供两种方式下载centos 7 系统镜像 1、阿里巴巴开源镜像站 2、…

关于视频汇聚融合EasyCVR平台多视频播放协议的概述

视频监控综合管理平台EasyCVR具备视频融合能力&#xff0c;平台基于云边端一体化架构&#xff0c;具有强大的数据接入、处理及分发能力&#xff0c;平台既具备传统安防视频监控的能力与服务&#xff0c;也支持AI智能检测技术的接入&#xff0c;可应用在多行业领域的智能化监管场…

4.PyCharm汉化

完成上一篇的安装之后&#xff0c;全英文的界面可能对一些英文不太好的小伙伴不太友好&#xff0c;本篇文章介绍Phcharm汉化教程&#xff1a; 点击菜单种的File-Setting 选择Marketplace在搜索框输入Chinese 点击安装 安装成功后会提示重新启动&#xff0c;点击Restart 安…

Invalidate简单分析

invalivade 流程 背景 最近在做Flutter的分层渲染分析&#xff0c;发现Flutter的分层渲染可以让节点标脏限制在同一个 Layer 中&#xff0c;从而提升性能。然后想到 Android 在更新 DisplayList 的时候会判断节点 dirty.isEmpty&#xff0c;从而决定是否更新DisplayList&#…

servlet接受参数和乱码问题

servlet接受参数和乱码问题 1、乱码问题 1&#xff09;get请求 传输参数出现中文乱码问题&#xff1a; 如果还存在问题&#xff1a; 2&#xff09;post请求 传输参数出现中文乱码问题&#xff1a; 2、接受参数&#xff1a; 3、登录注册案例

python数据处理程序代码,如何用python处理数据

大家好&#xff0c;给大家分享一下python数据处理程序代码&#xff0c;很多人还不知道这一点。下面详细解释一下。现在让我们来看看&#xff01; 要求&#xff1a;分别以james&#xff0c;julie&#xff0c;mikey&#xff0c;sarah四个学生的名字建立文本文件&#xff0c;分别存…

python机器学习(六)决策树(上) 构造树、信息熵的分类和度量、信息增益、CART算法、剪枝

决策树算法 模拟相亲的过程&#xff0c;通过相亲决策图&#xff0c;男的去相亲&#xff0c;会先选择性别为女的&#xff0c;然后依次根据年龄、长相、收入、职业等信息对相亲的另一方有所了解。 通过决策图可以发现&#xff0c;生活中面临各种各样的选择&#xff0c;基于我们的…

Python开发环境Spyder介绍

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 Spyder简介 Spyder (前身是 Pydee) 是一个强大的交互式 Python 语言开发环境&#xff0c; 提供高级的代码编辑、交互测试、调试等特性&#xff0c;支持包括 Windows、Linux 和 OS X 系统。 &#x1f447; &#x1f44…

React Native获取手机屏幕宽高(Dimensions)

import { Dimensions } from react-nativeconsole.log(Dimensions, Dimensions.get(window)) 参考链接&#xff1a; https://www.reactnative.cn/docs/next/dimensions#%E6%96%B9%E6%B3%95 https://chat.xutongbao.top/

uni、css——制作表格样式的模型

案例展示 这里以5列做展示&#xff08;可随意调节&#xff09; 案例代码 <view class"list"><view class"item" v-for"(item,index) in list" :key"index">1</view> <!-- 有内容 --><view clas…

【零拷贝】

一、零拷贝 1、零拷贝的概念 学习零拷贝时我们先了解几个buffer缓冲区&#xff1a; 当某个程序或已存在的进程需要某段数据时&#xff0c;它只能在用户空间中属于它自己的内存中访问、修改&#xff0c;这段内存暂且称之为user buffer正常情况下&#xff0c;数据只能从磁盘(或…

LeetCode724. 寻找数组的中心下标

题干 给你一个整数数组 nums &#xff0c;请计算数组的 中心下标 。 数组 中心下标 是数组的一个下标&#xff0c;其左侧所有元素相加的和等于右侧所有元素相加的和。 如果中心下标位于数组最左端&#xff0c;那么左侧数之和视为 0 &#xff0c;因为在下标的左侧不存在元素。…

pycharm运行pytest无法实时输出信息

需要去掉控制台输出。根据查询相关信息显示pycharm运行pytest无法实时输出信息&#xff0c;需要去掉pycharm里面的运行模式&#xff0c;点击减号&#xff0c;再点击加号&#xff0c;添加python执行文件即可实时输出信息。 问题描述&#xff1a; 使用pycharm运行代码时&#x…

时间复杂度为O(nlogn)的两种排序算法

1.归并排序 归并排序的核心思想&#xff1a;如果要排序一个数组&#xff0c;我们先把数组从中间分成前后两部分&#xff0c;然后对前后两部分分别排序&#xff0c;再将排好序的两部分合并在一起&#xff0c;这样整个数组就都有序了。 归并排序使用的就是分治思想。分治&#x…