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

说明

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

应用

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

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

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

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

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

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

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

相关推荐
星火开发设计13 小时前
广度优先搜索(BFS)详解及C++实现
数据结构·c++·算法··bfs·宽度优先·知识
飞天狗11113 小时前
E. Blackslex and Girls
算法
jamesge201014 小时前
限流之漏桶算法
java·开发语言·算法
Funny_AI_LAB14 小时前
Zcode:智谱AI推出的轻量级 AI IDE 编程利器
人工智能·python·算法·编辑器
@卞14 小时前
排序算法(3)--- 交换排序
数据结构·算法·排序算法
youngee1114 小时前
hot100-55有效的括号
算法·leetcode·职场和发展
嘻嘻嘻开心14 小时前
C语言学习笔记
c语言·数据结构·算法
Blossom.11814 小时前
GPTQ量化实战:从零手写大模型权重量化与反量化引擎
人工智能·python·算法·chatgpt·ai作画·自动化·transformer
睡醒了叭14 小时前
图像分割-传统算法-区域分割
图像处理·人工智能·算法·计算机视觉
代码游侠15 小时前
复习——网络基础知识
网络·笔记·网络协议·算法·http