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

链表经典面试题之二

 今天我们做一道环形链表的题目力扣141题https://leetcode.cn/problems/linked-list-cycle/

 这道题让我们分析链表中是否存环,存在的话返回true,不存在返回false。首先看到这道题我们要捋顺思路,怎么才能达到它要的效果?要找出是否存在一个环,那么我们能不能看看尾结点的下一个结点是不是之前出现过的结点呢?我们在仔细想一想,如果有环的话,存在尾结点吗?当然不存在,如果环存在的话,就没有尾结点,都已经叫尾结点了那肯定就是最后一个结点。所以我们不妨改变思路,用快慢双指针的方式做这道题目。

struct ListNode *fast=head;
struct ListNode *slow=head;

我们定义fast一次走两步,slow一次走一步,如果有环fast肯定先进环一直在换里面转,当slow进环的时候两个指针距离相差为N,而fast和slow每走一步,距离就减少1,总会存在,距离为0的情况,当fast=slow的时候,存在环,否则不存在;

 

while(){slow=slow->next;fast=fast->next->next;if(slow==fast)return true;}return false;

 但是这个while循环的条件怎么判断呢?什么时候循环停下?fast走的快,当fast走到尾为空的时候停下,有人会有疑问,不是有环的时侯链表没有尾吗?是的,但是我们这个判断是循环停下的条件,如果循环没有进循环时不时就是没有环就直接返回false了呢?

while(fast){slow=slow->next;fast=fast->next->next;if(slow==fast)return true;}return false;

这样就结束了吗?我们运行会发现它报了一个空指针的错误

到底哪里出现空指针了呢?我们想一下当时fast一次走两步,fast=fast->next->next,我们只判断了当fast==NULL的时候循环停止,是不是忽略掉fast->next的时候到空了呢?这个时候,fast->next还能指向next吗?所以,这个循环应该是while(fast&&fast->next)才可以。

struct ListNode *fast=head;
struct ListNode *slow=head;while(fast&&fast->next){slow=slow->next;fast=fast->next->next;if(slow==fast)return true;}return false;

当我们这样写完,运行就通过啦

相关文章:

  • 内向基环树
  • 基于DS1302时钟液晶12864显示2路闹钟仿真及源程序
  • 【操作系统】考研真题攻克与重点知识点剖析 - 第 2 篇:进程与线程
  • 迅为龙芯3A5000主板,支持PCIE 3.0、USB 3.0和 SATA 3.0显示接口2 路、HDMI 和1路 VGA,可直连显示器
  • Surface RT 安装 Linux
  • 111111111111111
  • [蓝桥杯复盘] 第 3 场双周赛20231111
  • 计算机网络技术
  • Aspose.OCR for .NET 2023Crack
  • Sprint Boot 学习路线 4
  • 一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
  • 考研数据结构单链表的增删改查看这一篇就够了
  • 【教3妹学编程-算法题】2923. 找到冠军 I
  • 【SpringBoot】手写模拟SpringBoot核心流程
  • maven重新加载后Target bytecode version总是变回1.8
  • python3.6+scrapy+mysql 爬虫实战
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • Android Studio:GIT提交项目到远程仓库
  • Angular Elements 及其运作原理
  • angular组件开发
  • Flannel解读
  • Spring Cloud Feign的两种使用姿势
  • Yii源码解读-服务定位器(Service Locator)
  • 官方解决所有 npm 全局安装权限问题
  • 缓存与缓冲
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 思否第一天
  • 新手搭建网站的主要流程
  • 学习JavaScript数据结构与算法 — 树
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • ​ArcGIS Pro 如何批量删除字段
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • #Java第九次作业--输入输出流和文件操作
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • $.ajax,axios,fetch三种ajax请求的区别
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (备忘)Java Map 遍历
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (转) Face-Resources
  • .NET Core WebAPI中封装Swagger配置
  • .NET Core引入性能分析引导优化
  • .NET Framework 4.6.2改进了WPF和安全性
  • .Net Web项目创建比较不错的参考文章
  • .net 反编译_.net反编译的相关问题
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • .net6+aspose.words导出word并转pdf
  • .NET学习全景图
  • .NET应用架构设计:原则、模式与实践 目录预览
  • ??在JSP中,java和JavaScript如何交互?