算法基础------快慢指针

说明

快慢指针上的快慢是指移动步数的长短,也就是每次向前移动速度的快慢。比如,指定快指针每次沿着链表向前移动2步,指定慢指针每次沿着链表向前移动1步。

应用

1、判断单链表是否为循环链表

首先设置快慢指针的起点为链表的头结点,快指针每次向前移动2步,慢指针每次向前移动1步。如果改链表为循环链表,则快指针会在不久后追上慢指针;如果是单链表,则快指针会先到达链表的末尾。利用快慢指针解决这个问题还有一个好处就是不需要知道链表的长度。

2、有序链表中寻找中位数

按快指针走两步,慢指针走一步的结构。快指针的移动速度是慢指针的2倍,所以快指针到达链表末尾时,慢指针到达链表中点。

有两种情况要分开考虑,即链表为偶数长度时,和链表为计数长度时(head节点仍然存储数据)。

当链表为偶数时,快指针只能到达链表的倒数第二个节点;则慢指针的魏志伟上中位数;因此返回(上中位数+下中位数)/ 2;

当链表为奇数时,快指针能到达链表的最后一个节点;则慢指针的位置就是中位数。

相关推荐
电饭叔11 分钟前
如何代码化,两点之间的距离
笔记·python·算法
TL滕14 分钟前
从0开始学算法——第十三天(Rabin-Karp 算法练习)
笔记·学习·算法·哈希算法
TL滕28 分钟前
从0开始学算法——第十三天(Rabin-Karp 算法)
笔记·学习·算法
喵了meme33 分钟前
C语言实战
算法·排序算法
jghhh0135 分钟前
基于否定选择算法的异常检测技术详解
算法
天才少女爱迪生36 分钟前
【算法设计】GLM-4.5V模型架构和算法设计详解
python·算法·语言模型
ULTRA??41 分钟前
Rust的移动语义
c++·算法·rust
不穿格子的程序员1 小时前
从零开始写算法——链表篇:相交链表 + 反转链表
数据结构·算法·链表
仰泳的熊猫1 小时前
1132 Cut Integer
数据结构·c++·算法·pat考试
aini_lovee1 小时前
基于边缘图像分割算法详解与MATLAB实现
开发语言·算法·matlab