数据结构之“快慢指针”

embedded/2024/9/24 7:23:15/

一、快慢指针

快慢指针是解决链表环问题的一个常见技巧
在这个方法中,我们设置两个指针,一个快指针(每次移动两步)和一个慢指针(每次移动一步)

二、“链表的中间结点”

1、题目:

在这里插入图片描述

2、解题思路:

通过快慢指针找到中间节点,快指针每次走两步,慢指针每次走一步,当快指针走到结尾的时候,慢指针正好走到中间位置

3、代码实现:

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/
struct ListNode* middleNode(struct ListNode* head) {struct ListNode *fast;struct ListNode *slow;fast = slow = head;while(fast && fast->next){slow = slow->next;fast = fast->next->next;}return slow;
}

4、测试用例:

在这里插入图片描述

三、“环形链表”

1、题目:

在这里插入图片描述

2、解题思路:

定义快慢指针fast,slow, 如果链表确实有环,fast指针一定会在环内追上slow指针

3、代码实现:

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/
bool hasCycle(struct ListNode *head) {if(head == NULL || head->next == NULL){return false;}struct ListNode *fast;struct ListNode *slow;fast = head->next;slow = head;while(slow != fast){if(fast == NULL || fast->next == NULL){return false;}slow = slow->next;fast = fast->next->next;}return true;
}

4、测试用例:

在这里插入图片描述

微语:迎着扑面而来的风,点点星光,以及街道两边那道无限往外延伸、延至天边的光


http://www.ppmy.cn/embedded/24594.html

相关文章

ipad的文件如何传到手机里 iPad较大文件怎么发送出去 iMazing下载教程

在现代生活中,随着移动设备的普及和多样化,我们经常需要在不同设备之间传输文件,以便在工作、学习或娱乐中更加便捷地使用这些文件。iPad和iPhone是用户广泛使用的设备,我们时常使用它们来存储和访问大量的个人数据。但有时&#…

Aigtek安泰电子| 多系列宽频大功率放大器全新上市!可免费试用!

2024年4月,Aigtek安泰电子ATA-300/3000/4000系列功率放大器,迎来了进一步升级,最大输出功率可达1000Wp,最大输出电流20Ap,频率DC~3MHz,双极性四象限输出,可驱动功率型/高压型负载。 新型的ATA-3…

Arcgis Pro 制图基础操作流程

为什么推荐用Arcgis Pro 出图? 1、相比Arcmap 10.X,Pro的制图功能更强大,制图更便捷 2、相比PS,Arcgis Pro中的数据自带坐标,无需校正,表达更准确 3、自带底图,方便又美观 01 — 与Arcmap …

人脸识别开源算法库和开源数据库

目录 1. 人脸识别开源算法库 1.1 OpenCV人脸识别模块 1.2 Dlib人脸识别模块 1.3 SeetaFace6 1.4 DeepFace 1.5 InsightFace 2. 人脸识别开源数据库 2.1 CelebA 2.2 LFW 2.3 MegaFace 2.4 Glint360K 2.5 WebFace260M 人脸识别 (Face Recognition) 是一种基于人的面部…

使用 NVM 管理 Node.js 版本

在软件开发中,管理项目所依赖的运行环境版本是一项挑战,尤其是在使用 Node.js 这样频繁更新的平台时。Node Version Manager(NVM)是一种流行的工具,它允许开发者在同一台机器上安装和使用多个 Node.js 版本。本文将介绍…

Linux基础IO(下)

目录 1. 缓冲区 1.1 定义 1.2 理解缓冲区 1.2.1 为什么要有缓冲区 1.2.2 缓冲区的工作原理 缓冲区什么时候写入,什么时候刷新? 2. 文件系统 2.1 什么是文件系统? 2.2 为什么要有文件系统? 2.3 认识文件的管理结构 2.…

基于FPGA的数字信号处理(3)--什么是浮点数?

科学计数法 你可能不了解「浮点数」&#xff0c;但你一定了解「科学记数法」。 10进制科学记数法把一个数表示成a与10的n次幂相乘的形式&#xff08;1≤|a|<10&#xff0c;a不为分数形式&#xff0c;n为整数&#xff09;&#xff0c;例如&#xff1a; 19970000000000 1.9…

分布式与一致性协议之Raft算法(三)

Raft算法 如何复制日志 你可以把Raft算法的日志复制理解成一个优化后的二阶段提交(将二阶段优化成了一阶段)。优化后减少了一半的往返消息&#xff0c;也就是降低了一半的消息延迟&#xff0c;那日志复制的具体过程又是什么呢&#xff1f; 首先&#xff0c;领导者进入第一阶段…