单链表OJ题:LeetCode--141.环形链表

news/2025/2/13 20:57:35/

朋友们、伙计们,我们又见面了,本期来给大家解读一下LeetCode中的第141道单链表OJ题,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成!

数据结构与算法专栏:数据结构与算法

个  人  主  页 :stackY、

C 语 言 专 栏:C语言:从入门到精通

LeetCode--141.环形链表:https://leetcode.cn/problems/linked-list-cycle/description/

 1.题目介绍

给你一个链表的头节点 head ,判断链表中是否有环。

如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。

如果链表中存在环 ,则返回 true 。 否则,返回 false 。

2.实例演示 

 

3.题解思路 

在这里如果使用最基础的方法来判断环形链表会比较麻烦,而且办法也不是很多,那么在这里小编给大家提供一种方法,依旧是我们熟悉的快慢指针的方法:

        我们可以设置一个快指针和一个慢指针,如果有环,那么快指针和慢指针必定可以在环中相遇,因为快指针的速度始终是慢指针的2倍,所以快指针可以在环中追上慢指针,我们先来使用这种比较简便的方法,后面我们可以来验证一下:

代码演示:

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/
bool hasCycle(struct ListNode *head) {//设置快慢指针struct ListNode* slow = head;struct ListNode* fast = head;while(fast && fast->next){//快指针一次走两步fast = fast->next->next;//慢指针一次走一步slow = slow->next;//如果在环中相遇就带环if(fast == slow){return true;}}//如果整个链表都走完了还是没有相遇则不带环return false;
}

这种方法看似简单,但是该如何证明呢?我们接着往下看:

4.拓展面试题

1. 假设有环,快指针一次走一步,慢指针一次走两步,快指针一定会追上慢指针吗?

 快指针速度是慢指针的2倍,所以快指针先进环,慢指针后进环,我们假设快指针和慢指针相距为N,慢指针(slow)进环之后,快指针(fast)开始追击慢指针(slow),快指针一次走两步,慢指针一次走1步,那么它们的距离随着它们走的步数会逐渐的缩小1,就是一个公差为-1的等差数列,那么只要走的步数够多,快指针一定可以和慢指针相遇。

所以慢指针一次走一步,快指针一次走两步,一定会追上。

2. 假设有环,如果快指针走任意步数,慢指针走一步,快指针能追上慢指针吗?

在这里我们假设快指针一次走三步,慢指针一次走1步。

快指针速度是慢指针的3倍,所以快指针先进环,慢指针后进环,我们假设快指针和慢指针相距为N,慢指针(slow)进环之后,快指针(fast)开始追击慢指针(slow),快指针一次走3步,慢指针一次走1步,那么它们的距离随着它们走的步数会逐渐的缩小2,就是一个公差为-2的等差数列,这时我们需要计算一下它们之间的距离:

快慢指针的距离会随着步数的增加最后变为-1,这就表示会开始下一轮的追击,那么下一轮的追击就可以分为两种情况:

1. 假设环的周长为C,那么快慢指针的距离就变为了C-1,这时C-1如果为奇数,那么永远追不上。

2. 假设环的周长为C,那么快慢指针的距离就变为了C-1,这时C-1如果为偶数,那就就可以追上。

总结:

1. 快指针一次走一步,慢指针一次走两步,快指针一定会追上慢指针。

2. 如果快指针走任意步数,慢指针走一步,快指针不一定能追上慢指针。

朋友们、伙计们,美好的时光总是短暂的,我们本期的的分享就到此结束,最后看完别忘了留下你们弥足珍贵的三连喔,感谢大家的支持!


http://www.ppmy.cn/news/229057.html

相关文章

【STM32CubeMX】WS2812彩灯

前言 有时间我就按照网上的时序推理了WS2812的传输时序。之前就推过时序了,但是当时时序好像没对,因为没用逻辑分析仪查看,就以为通过电片机的运行主频,在控制NOP,就能得到us级的延时控制,但是真实的情况是…

牛客网语法刷题篇(C语言) — 输出格式化

🤩本文作者:大家好,我是paperjie,感谢你阅读本文,欢迎一建三连哦。 🥰内容专栏:这里是《C语言—语法篇》专栏,笔者用重金(时间和精力)打造,基础知识一网打尽,…

【微服务项目】Spring Cloud Alibaba 实战

Spring Cloud Alibaba 实战 一、目标 理解什么是微服务架构理解什么是springcloud及spring cloud alibaba和springcloud的关系掌握使用springcloud alibaba 实现微服务远程调用掌握使用springcloud alibaba 实现服务注册与发现掌握使用springcloud alibaba 实现基本的服务配置…

AAOS 音频动态路由

文章目录 基本概念车载音频配置文件外部的配置音频区的方式车载音频服务配置路由流程框架中获取可用输出设备配置例子测试方法相关问题 基本概念 Android 管理来自 Android 应用的声音,同时控制这些应用,并根据其声音类型将声音路由到 HAL 中的输出设备…

Domino邮件系统技术方案

一、 目的 构建企业内、外统一的电子邮件系统,邮件系统与办公系统集成,共享同一通讯录与组织架构。 二、 采用技术架构 1、 邮件服务器: 采用市场公认首选的IBM Domino作为邮件系统,是全球500强60%的企业选择使用的邮件系统平台…

罗伯特·蒙代尔教授

1956年 获美国麻省理工学院(MIT)经济学博士 1961年 任职于国际货币基金组织 1966~1971年 在斯坦福大学和约翰霍普金斯大学任教 1970年 任欧洲经济委员会货币委员会顾问 1971~1987年 任SantaColomba国际货币改革会议主席 1972~1973年 统…

巴贝奇计算机科学思想,计算机之父巴贝奇_图灵_计算机科学之父

麻省理工学院媒体实验室名誉教授,数学家,计算机科学家,人工智能领域先驱马文-明斯基(Marvin Minsky),于1月24日因脑溢血在波士顿布莱根妇女医院去世,享年88岁。 明斯基出生于1927年,是一个土生土长的纽约人…

查尔斯·巴贝奇——计算机先驱者之父

巴贝奇最主要的思想贡献就是把自己所擅长的科学领域中所使用的概念引入到企业管理中来。也许是因为巴贝奇在科学领域中发明差分机以及分析机的原因,崇尚科学合理分工以及高效工作的理念使得巴贝奇认为在企业管理中也需要提倡更加精细的分配以及分工,从而…