当前位置: 首页 > article >正文

每日算法1(快慢指针)

通过一道题来了解快慢指针

这是一道力扣的算法题,首先来读题,是删除链表的中间元素,先来分析一下题,链表一共有三种可能,第一种是空链表,第二种链表的个数是偶数,第三种是链表的个数是奇数,我们分别来对这三种情况讨论。

大多数人第一种想到的就是遍历链表,记录链表的长度,然后用长度除2再1,最后返回这个数,

另一种就是快慢指针,首先我们先定义两个指针,其中一个指针一次走一个元素,另一个一次走两个元素,当第快指针走向链表最后一个节点或者走出节点时,此时慢指针就指向要返回的那个节点。

怎么实现让两个指针向后走,要通过一个循环,我们先不定义循环条件,先实现循环

这样就可以实现slow一次一个

fast一次两个

终止条件要怎么写,当为奇数时

slow=1,fast=1;

slow=2,fast=3;

slow=3,fast=5;

奇数时就是fast的next为空指针

当为偶数时

slow=1,fast=1;

slow=2,fast=3;

slow=3,fast=5;

slow=4,fast=NULL;

当为偶数时就是fast是NULL跳出循环。

然后将循环条件填入

那么这样写对吗,答案是对的,那么如果将他们翻转过来,写成fast->next&&fast还对吗,那就不对了,如果fast为空指针,对空指针进行解引用就会报错,还是要写成fast&&fast->next,因为当fast为空指针就结束了,不会进行fast的解引用,因此就不会发生报错。

最后再返回slow指针就可以了。

提交试一下,答案也是对的,

今天的每日算法就到此为止了,明天继续。


http://www.kler.cn/a/318370.html

相关文章:

  • vscode远程连接服务器并启用tmux挂载进程
  • C++ 并发专题 - 自旋锁的实现(Spinlock)
  • 边缘的检测
  • Diffusion Policy——斯坦福机器人UMI所用的扩散策略:从原理到其编码实现(含Diff-Control、ControlNet详解)
  • flutter 发版的时候设置版本号
  • NAT网络工作原理和NAT类型
  • 实例讲解电动汽车故障分级处理策略及Simulink建模方法
  • 面试官:谈谈自己对IOC和AOP的理解? Part1
  • Unity 设计模式 之 结构型模式 -【适配器模式】【桥接模式】 【组合模式】
  • 前端读取PDF和DOCX文件(干货分享)
  • 基于深度学习的可再生能源的效率优化
  • thinkphp 做分布式服务+读写分离+分库分表+负载均衡(分区)(后续接着写)
  • 《线性代数》学渣笔记
  • ai论文写作指导有哪些?六款最火ai论文生成平台大推荐
  • AI 智能名片链动 2+1 模式商城小程序中的体验策略
  • 某文书网爬虫逆向
  • Flask建立的Web网站的can‘t open file C_Program问题的分析
  • MySQL学习笔记(持续更新中)
  • sprintf()函数的介绍及其用法
  • 从入门到精通:PHP 100个关键技术关键词
  • 常用的基于无线射频( UWB)室内定位技术的原理与算法
  • Android View 的绘制流程
  • 获取参数
  • 如何在MATLAB中进行无线通信系统性能分析
  • 构建高效企业客户管理系统:SpringBoot应用
  • 旋转矩阵乘法,自动驾驶中的点及坐标系变换推导