C语言:环形链表

1.例子1:环形链表

142. 环形链表 II - 力扣(LeetCode)

思路:我们先定义两个变量slow和fast,slow每次走一步,fast每次走两步,如果链表是环形链表,那么必定存在fast不会走到链表的最后并且fast先slow进环,fast和slow一定会在环内相遇。

fast和slow在环内相遇点定义一个指针变量meet,假设圆的周长为C,head从头开始走,meet从相遇点开始走,head点到进环点距离为L,假设slow和fast在圆内的相遇点距离为N,如下图所示:

 

 从上图可知haed和meet必定会相遇,相遇点就是进环点

 代码:

struct ListNode *detectCycle(struct ListNode *head) {struct ListNode* slow = head;struct ListNode* fast = head;while(fast && fast->next){slow = slow->next;fast = fast->next->next;if(slow == fast){struct ListNode* meet=slow;while(meet != head){meet = meet->next;head = head->next;} return meet;}}return NULL;
}

例子2:随机链表的赋值 

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

思路:先在每一个节点后面开辟一个拷贝节点copy,拷贝节点的next指针就是cur的next指针,cur的next指针指向拷贝节点,原链表的random指向的下一个节点就是拷贝节点copy的random指向的节点,然后将拷贝节点尾插在一个新链表中,需要注意在尾插在新链表前先将原链表的cur指针重新指向head节点。

 

 

 代码:

struct Node* copyRandomList(struct Node* head) 
{struct Node* cur = head;//开辟新节点copy节点连接在每一个原链表节点的后面while(cur){//开辟copy节点struct Node* copy = (struct Node*)malloc(sizeof(struct Node));copy->val = cur->val;copy->next = cur->next;cur->next = copy;//cur 移动到copy节点的后面节点的位置cur = copy->next;}cur = head;while(cur){struct Node* copy = cur->next;if(cur->random == NULL){copy->random = NULL;}else{copy->random = cur->random->next;}cur= copy->next;}//将copy节点拿下来尾插到新链表中cur = head;struct Node* newhead = NULL,*newtail = NULL;while(cur){//创建新节点copy节点struct Node* copy = cur->next;//是否为空链表,如果是空链表那么新链表的头结点和尾节点都是copy节点if(newtail == NULL){newhead = newtail = copy;}else{newtail->next = copy;newtail = newtail->next;}cur = copy->next;}return newhead;}

 解析:

在原链表中定义一个cur指针指向头结点,使用malloc开辟copy节点,当cur指针不为空时进入while循环,拷贝节点的值为cur的值,即copy->val = cur->val; copy节点的下一个节点指向cur的下一个节点,而cur节点的下一个节点更改为copy节点,即 copy->next = cur->next:cur->next =copy;

cur移动到copy节点的下一个节点,即cur = copy->next;

cur指针重新指向头结点head节点,当cur不为空时进入循环,如果cur的random指向的节点为空,那么copy节点的random节点也为空,如果cur的random指向的节点不为空,那么copy节点的random指向的下一个节点就是copy节点random,即copy->random = cur->random->next;

 cur指针重新指向头结点head节点,定义新链表的头结点和尾节点,当cur不为空时进入循环,如果新链表为空,那么新链表的头结点和尾节点就是copy节点,如果不为空,那么就将copy节点尾插在新链表的后面

 

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

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

相关文章

QT功能 实现静态内容国际化实验

文章目录 第一步:新建一个QT工程第二步:添加控件第三步:在pro文件中添加内容第四步:更新文件第五步:打开QT的Linguist第六步:添加翻译内容第七步:回到QT Creator中添加文件第八步:给…

因表别名引用错误导致查询SQL执行时间长未出结果

问题描述: 项目组人员反馈在执行一条提取数据SQL时执行很慢,每次执行一段时间就报超时,要求帮忙提取下。 解决过程: 项目组人员发来SQL后,看了下SQL,没什么问题,就在客户端上执行了下&#xff0…

Python专题:三、数字和运算(2)

目录 一、数学运算 二、赋值运算 一、数学运算 1、运算符号 加法 减法- 乘法* 除法/ 计算机中浮点数表示有精度限制,Python有限,所以近似取数 2、除法取整// Python2中 整数/整数 值为整数 Python3中 整数/整数 整数or浮点数 //计算除法对结果取…

css backdrop-filter 实现背景滤镜

官方给出的定义是:backdrop-filter属性允许您将图形效果(如模糊或颜色偏移)应用于元素后面的区域。因为它适用于元素后面的所有内容,所以要查看元素或其背景的效果,需要透明或部分透明。 大致分为以下10种&#xff1a…

【网络编程】Tomcat | 目录结构 | HTTP服务器

文章目录 Tomcat一、Tomcat的目录结构 Tomcat Tomcat是一个HTTP服务器 使用HTTP进行通信,涉及到HTTP客户端(浏览器、Postman、爬虫等待)和HTTP服务器。 根据现成的HTTP服务器进行二次开发。 已经将怎么处理HTTP请求、如何构造HTTP响应都封…

网络工程师必备:静态路由实验指南

大家好,这里是G-LAB IT实验室。今天带大家学习一下华为静态路由实验配置 01、实验拓扑 02、实验需求 1.R1环回口11,1,1.1模拟PC1 2.R2建立2个环回口模拟Server server-1: 22,1,1.1 server-2: 44.1.1.1 3.要求使用静态路由实现全网互通 PC1去往server-1从R3走…

【Java EE】网络原理——UDP

目录 1.应用层 2.传输层 2.1端口号 2.1.1端口号的范围划分 2.1.2一个端口号可以被多个进程绑定吗? 2.1.3一个进程可以绑定多个端口号吗? 3.UDP协议 3.1UDP的格式 3.1.1 UDP的源端口号 3.1.2 UDP的目的端口号 3.1.3 UDP长度 3.1.4UDP校验和 3…

故障——蓝桥杯十三届2022国赛大学B组真题

问题分析 这道题纯数学&#xff0c;考察贝叶斯公式 AC_Code #include <bits/stdc.h> using namespace std; typedef pair<int,double> PI; bool cmp(PI a,PI b){if(a.second!b.second)return a.second>b.second;return a.first<b.first; } int main() {i…

上班不想用脑子写代码了怎么办?那就试试Baidu Comate啊宝贝

本文目录 前言1、视频编程实战1.1、熟悉代码库中的代码1.2、参考现有代码编写新代码 2、下载使用教程3、使用体验3.1、AutoWork 产品测评3.2、解决有关ajax请求后重定向问题3.3、询问编程相关知识3.3.1、cookie和session的区别与联系3.3.2、数据库中主键外键的相关知识 4、问题…

《大疆二次开发》EMQX和MQTT部署

EMQX 服务器 基础知识 概念 EMQX (Erlang/Enterprise/Elastic MQTT Broker) &#xff1b;EMQ/EMQX就是MQTT Broker的一种实现&#xff1b;一款开源的大规模分布式 MQTT 消息服务器&#xff0c;功能丰富&#xff0c;专为物联网和实时通信应用而设计&#xff1b;支持多种协议&…

医院预约挂号|基于Springboot+vue的医院预约挂号系统小程序的设计与实现(源码+数据库+文档)

医院预约挂号系统小程序 目录 基于Springboot&#xff0b;vue的医院预约挂号系统小程序设计与实现 一、前言 二、系统设计 三、系统功能设计 1小程序端 后台功能模块 4.2.1管理员功能 4.2.2医生功能 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选…

linux 性能监控命令之dstat

1. dstat 系统默认为安装&#xff0c;直接安装阿里源后&#xff0c;yum install -y dstat安装即可&#xff0c;该命令整合了 vmstat &#xff0c; iostat 和 ifstat&#xff0c;我们先看下效果&#xff1a; 我们先看看具体参数&#xff1a; [rootk8s-master ~]# dstat --help …