C语言/数据结构——每日一题(环形链表)

一.前言

今天在力扣上刷到一道链表题——环形链表https://leetcode.cn/problems/linked-list-cycle

想着和大家们分享一下。让我们直接开始今天的分享吧。、

二.正文

1.1题目描述

1.2题目分析

这道题是想让我们做出分析,该链表是不是带环链表,如果是带环链表就返回true。否则,就返回false。

这道题我们可以采用快慢指针的办法:定义一个快指针fast,一次走两个节点。再定义一个慢指针slow,一次只走一个节点。

如果不是带环链表,slow在之后的遍历中是永远不可能与fast相遇的。因此当slow和fast相遇后,就可以证明该链表是环形链表。这里咱们可以这样理解fast跑的快一些,早早的就进入了环内,当速度慢一些地slow进环以后,fast可能已经循环了好几圈了。此时就变成了fast追击slow的问题了。

为什么我们在这里肯定fast与slow一定相遇呢。

这里我们可以做一个假设,假设当slow刚进入环的时候,fast与slow的距离为N。

slow走一步。fast走两步。它们的距离就会有以下变化:

N

N-1

N-2

N-3

。。。。

N-n

因此一定存在某个瞬间N-n为0。即两个指针相遇。

那么如果fast一次走三步,fast和slow会相遇吗?

同理,fast走4步也是按此分析。

1.3代码实现

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/typedef struct ListNode ListNode;
bool hasCycle(struct ListNode *head) {if(head==NULL)return false;
ListNode* slow,*fast;
slow=fast=head;
while(fast&&fast->next){fast=fast->next->next;
slow=slow->next;
if(fast==slow)
{return true;
}}return false;
}

三.结言

题目分享写到这就结束了。帅哥美女们,觉得对自己有所帮助,能不能给我个三连。谢谢啦。

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

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

相关文章

计算机网络 3.3OSI参考模型

第三节 OSI参考模型 一、认识OSI/RM 1.描述:定义了一个连接异种计算机的标准主体结构,给网络设计者提供了一个参考规范。 2.组织:国际标准化组织. 3.发展:1979年研究并提出了该国际标准。 4.分层原则: ①层次的划…

基于SSM SpringBoot vue学校办公自动化系统

基于SSM SpringBoot vue学校办公自动化系统 系统功能 登录注册 个人中心 用户信息管理 部门信息管理 公共通知管理 个人邮箱管理 日常安排管理 管理员管理 签到记录管理 会议管理 开发环境和技术 开发语言:Java 使用框架: SSM(Spring SpringMVC Mybaits)或Spr…

资料如何打印更省钱

在日常工作和学习中,我们经常需要打印各种资料。然而,随着打印成本的不断提高,如何更省钱地打印资料成为了大家关注的焦点。今天,就为大家分享一些资料打印的省钱技巧,并推荐一个省钱又省心的打印平台。 首先&#xff…

(动画详解)LeetCode232.用栈实现队列

💖💖💖欢迎来到我的博客,我是anmory💖💖💖 又和大家见面了 欢迎来到动画详解LeetCode算法系列 用通俗易懂的动画让算法题不再神秘 先来自我推荐一波 个人网站欢迎访问以及捐款 推荐阅读 如何低成…

windows安装DrawDB

下载 新建一个目录drawdb,使用git下载,如果没有安装git的话,进入git官网进行下载windows版本 https://git-scm.com/downloads。 空白地方鼠标右键,打开git终端 执行命令: git clone https://github.com/drawdb-io/drawdb 安装依…

苹果cms:开启高速缓存加快访问速度

由于苹果cms采集的影片数据过多,如果不设置缓存,可能会造成网站访问缓慢,或者CPU消耗过高。随着用户访问量的上升,添加缓存设置是有这个必要的。目前cms提供了四种缓存方式 1)file:以文件形式,通俗说直接访问Mysql,要达…

【Arduino】数字I/O的使用

目录 1、引脚工作模式 2、写入引脚digitaWrite() 3、读取引脚digitalRead(pin); 4、示例 跑马灯 1、引脚工作模式 Arduino通过pinMode()设置引脚的io工作模式,一共有4种模式 工作模式 Mode 说明 输出模式 OUTPUT 引脚为低阻抗状态&…

Docker入门指南:Docker容器的使用(三)

🍀 前言 博客地址: CSDN:https://blog.csdn.net/powerbiubiu 👋 简介 在本章节中,将深入探讨 Docker 容器的概念,以及容器的使用。 📖 正文 1 什么是容器 1.1 Docker容器的介绍 Docker 容…

RT-Thread事件集

文章目录 前言一、RT-Thread事件集的概念二、事件集函数的使用1.创建事件集函数2.事件集发送函数3.事件集接收函数4.事件集删除函数 三、事件集使用例程总结 前言 本篇文章将给大家讲解RT-Thread中事件集的概念,了解什么是事件集及事件集的函数使用方法。 一、RT-…

uni-app跨端兼容

1.样式兼容 小程序端不支持*选择器,可以使用(view,text) 页面视口差异(tabar页、普通页) H5端默认开始scoped 例如骨架屏样式出现问题,需要将之前的样式拷贝到骨架屏中 提示:H5端是单页面应用,scoped隔离…

【AI大模型】自动生成红队攻击提示--GPTFUZZER

本篇参考论文为: Yu J, Lin X, Xing X. Gptfuzzer: Red teaming large language models with auto-generated jailbreak prompts[J]. arXiv preprint arXiv:2309.10253, 2023. https://arxiv.org/pdf/2309.10253 一 背景 虽然LLM在今天的各个领域得到了广泛的运用…

LeetCode343:整数拆分

题目描述 给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k > 2 ),并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 代码 动态规划 class Solution { public:int integerBreak(int n) {/*dp[i]:表示对…