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

说明

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

应用

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

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

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

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

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

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

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

相关推荐
墨韵流芳12 分钟前
CCF-CSP第41次认证第三题——进程通信
c++·人工智能·算法·机器学习·csp·ccf
csdn_aspnet1 小时前
C# 求n边凸多边形的对角线数量(Find number of diagonals in n sided convex polygon)
开发语言·算法·c#
凌波粒1 小时前
LeetCode--349.两个数组的交集(哈希表)
java·算法·leetcode·散列表
paeamecium2 小时前
【PAT甲级真题】- Student List for Course (25)
数据结构·c++·算法·list·pat考试
Book思议-3 小时前
【数据结构】栈与队列全方位对比 + C 语言完整实现
c语言·数据结构·算法··队列
SteveSenna3 小时前
项目:Trossen Arm MuJoCo
人工智能·学习·算法
NAGNIP3 小时前
一文搞懂CNN经典架构-DenseNet!
算法·面试
道法自然|~3 小时前
BugCTF黄道十二宫
算法·密码学
WHS-_-20224 小时前
Python 算法题学习笔记一
python·学习·算法
沉鱼.444 小时前
第六届题目
算法