链表经典面试题之二

 今天我们做一道环形链表的题目力扣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;

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/142418.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

gerrit-access权限管理

refs/heads/sandbox/${username}/*: 可以在用户的自己命名空间内随意创建分支 Project Access Control lists 取最大范围 Group Reference Name Label Range Anonymous Users refs/heads/* Code-Review -1…1 Registered Users refs/heads/* Code-Review -1…2 Foo Leads refs…

Vmware虚拟机重装 虚拟机能ping通主机,而主机不能ping通虚拟机的问题

CClean,用它把你电脑上已经卸载的软件但是注册表还没删干净的把注册表删干净,之前说的那种情况(虚拟网络编辑器打不上勾)就迎刃而解了。 Ps:CClean:再网上百度就可以查到,软件对用户也很友好&a…

Git 分支操作详解:创建、提交、合并主分支

Git 是一款强大的分布式版本控制系统,分支是其核心特性之一,为团队协作和项目管理提供了灵活性。本文将介绍 Git 分支的基本用法,包括创建分支、提交更改、合并主分支等操作。 1、 创建分支 在 Git 中,分支是项目开发的不同线路&…

C++--二叉树经典例题

本文,我们主要讲解一些适合用C的数据结构来求解的二叉树问题,其中涉及了二叉树的遍历,栈和队列等数据结构,递归与回溯等知识,希望可以帮助你进一步理解二叉树。 目录​​​​​​​ 1.二叉树的层序遍历 2.二叉树的公…

记录第一次

1.看接口 看控制台 报错吗? 控制台 空指针报错 前端控制台 2.找报错 看哪里报的错误,控制台的错误(空指针报错) 错误问题: 3.分析业务 业务问题 一定要问, 4. 找到出错点

2023.11.10 信息学日志

2023.11.10 信息学日志 1. CF1613E Crazy Robot题目描述题目概况思路点拨 1. CF1613E Crazy Robot 题目描述 https://www.luogu.com.cn/problem/CF1613E 题目概况 来源:Codeforces 洛谷难度: 绿题 \color{green}绿题 绿题 CF难度: 2000…

Qt绘制各种图表

绘制柱状图: void MainWindow::iniBarChart() { //柱状图初始化QChart *chart new QChart(); //创建chartchart->setTitle("Barchart演示");chart->setAnimationOptions(QChart::SeriesAnimations);ui->chartViewBar->setChart(chart); //为…

设计模式之模版方法(TemplateMethod)

模版方法 钩子函数 回调函数 在父类里面有一个模版方法,在这个方法里面调用了op1,op2,op3… 在子类里面如果想要改变父类的op1和op2 只需要重写op1和op2,那么这个重写之后的方法,可以在父类里面直接调用的到 例子: J…

Postman小白安装和注册入门教程

近期在复习Postman的基础知识,在小破站上跟着百里老师系统复习了一遍,也做了一些笔记,希望可以给大家一点点启发。 一)安装 访问官网https://www.getpostman.com/downloads/,直接下载安装。 二)注册和登录…

【C/C++底层】内存分配:栈区(Stack)与堆区(Heap)

/*** poject * author jUicE_g2R(qq:3406291309)* file 底层内存分配:栈区(Stack)与堆区(Heap)* * language C/C* EDA Base on MVS2022* editor Obsidian(黑曜石笔记软件)* * copyright 2023* COPYRIGHT …

千万富翁分享:消费多少免单多少,电商运营高手实战秘籍拆解

千万富翁分享:消费多少免单多少,电商运营高手实战秘籍拆解 后疫情时代,国内电商圈层进程依然是在高速发展阶段,今年2023年双十一也彻底落下帷幕,但这次相较于往常却没有公布具体的成交规模数据,那么&#x…

国产双核DSP与 TI 的TMS320F28377 大PK

国产DSP,QX320F28377与 TI的 TMS320F28377 孰强孰弱

Redis的特性以及使用场景

分布式发展历程参考 陈佬 http://t.csdnimg.cn/yYtWK 介绍redis Redis(Remote Dictionary Server)是一个基于客户端-服务器架构的在内存中存储数据的中间件,属于NoSQL的一种。它可以用作数据库、缓存/会话存储以及消息队列。 作为一种内存数…

FreeSwitch安装视频

文章目录 序言Centos7安装FreeSwitch-1.6 序言 学习资料来源《FreeSWITCH权威指南》-作者杜金房这本书。我是2022年6月毕业的,偶然的机会接触到FreeSWITCH,FreeSWITCH纯属个人爱好,进行笔记整理。也一直希望有机会可以参与FreeSWITCH相关工作…

思维导图软件 Xmind mac中文版软件特点

XMind mac是一款思维导图软件,可以帮助用户创建各种类型的思维导图和概念图。 XMind mac软件特点 - 多样化的导图类型:XMind提供了多种类型的导图,如鱼骨图、树形图、机构图等,可以满足不同用户的需求。 - 强大的功能和工具&#…

Vue3-admin-template 框架修改登录页面

一. 修改views/login/comp/LoginForm.vue文件里面的内容 const state reactive({ruleForm: {account: admin,password: 123456,},loading: false,checkedPwd: false,redirect: undefined,rules: {account: [{ required: true, message: t(login.rules.account), trigger: bl…

C++学习---信号处理机制、中断、异步环境

文章目录 前言信号处理signal()函数关于异步环境 信号处理函数示例raise()函数 前言 信号处理 关于信号,信号是一种进程间通信的机制,用于在程序执行过程中通知进程发生了一些事件。在Unix和类Unix系统中,信号是一种异步通知机制&#xff0c…

Kibana使用Watcher监控服务日志并发送飞书报警(Markdown)

Watcher是什么 Kibana Watcher 是 Elasticsearch 的监控和告警工具,它允许你设置和管理告警规则以监控 Elasticsearch 数据和集群的状态。Kibana Watcher 可以监测各种指标和数据,然后在满足特定条件时触发警报。它提供了一种强大的方式来实时监控 Elas…

​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型

内容来源:xiaohuggg Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型 ​该模型是由Hugging Face团队开发,它在Whisper核心功能的基础上进行了优化和简化,体积缩小了50%。速度提高了6倍。并且在分布外评估集上…

Kotlin学习之2

比较引用 比较值 集合类型 不可变List&#xff1a;List<T> 可变List&#xff1a;MutableList<T> 不可变Map&#xff1a;Map<K,V> 可变Map&#xff1a;MutableMap<K,V> 不可变Set&#xff1a;Set<T> 可变Set&#xff1a;MutableSet<T&…