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

【力扣刷题实战】环形链表

大家好,我是小卡皮巴拉 

文章目录

目录

力扣题目: 环形链表

题目描述

示例 1:

示例 2:

示例 3:

解题思路

问题理解

算法选择

具体思路

题目要点

完整代码(C语言)

兄弟们共勉 !!!   


每篇前言

博客主页:小卡皮巴拉

咱的口号:🌹小比特,大梦想🌹

作者请求:由于博主水平有限,难免会有错误和不准之处,我也非常渴望知道这些错误,恳请大佬们批评斧正。

力扣题目: 环形链表

原题链接:  环形链表

题目描述

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

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

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

示例 1:

输入:head = [3,2,0,-4], pos = 1
输出:true
解释:链表中有一个环,其尾部连接到第二个节点。

示例 2:

输入:head = [1,2], pos = 0
输出:true
解释:链表中有一个环,其尾部连接到第一个节点。

示例 3:

输入:head = [1], pos = -1
输出:false
解释:链表中没有环。

解题思路

问题理解

给定一个链表的头节点 head,我们需要判断链表中是否存在环。链表中的环意味着存在某个节点,通过连续跟踪其 next 指针会再次回到这个节点。

算法选择

我们选择使用快慢指针(也称为龟兔赛跑算法)来解决这个问题。快指针每次移动两步,慢指针每次移动一步。如果链表中存在环,那么快慢指针最终会在环内相遇。如果链表中没有环,那么快指针会先到达链表的尾部(即 null)。

具体思路

  1. 初始化快慢指针

    • 定义两个指针 slow 和 fast,并将它们都初始化为指向链表的头节点 head

  2. 快慢指针移动

    • 使用一个 while 循环来移动快慢指针,循环条件是 fast 和 fast->next 都不为 null(因为快指针需要移动两步,所以需要确保 fast->next 存在)。

    • 在每次循环中,慢指针 slow 移动一步(slow = slow->next)。

    • 同时,快指针 fast 移动两步(fast = fast->next->next)。

  3. 检查相遇

    • 在每次循环中,检查 slow 和 fast 是否相等。如果相等,说明快慢指针在环内相遇,链表中存在环,返回 true

  4. 循环结束

    • 如果快指针 fast 或 fast->next 到达了链表的尾部(即 null),说明链表中没有环,退出循环并返回 false

题目要点

  • 快慢指针:使用快慢指针(slow 和 fast)来判断链表中是否存在环。

  • 边界条件:虽然题目没有明确要求处理空链表或只有一个节点的链表,但根据算法逻辑,这些情况下快指针会很快到达 null,从而正确返回 false。因此,不需要额外处理这些边界条件。

完整代码(C语言)

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

兄弟们共勉 !!!   

码字不易,求个三连

抱拳了兄弟们!

 


http://www.mrgr.cn/news/50336.html

相关文章:

  • 安全光幕的Mutting功能
  • fastify 中的 payload 作用
  • Java8开始ConcurrentHashMap,为什么舍弃分段锁?
  • 在vue项目中如何合理高效的使用生命周期钩子函数
  • 智能之眼:如何用监督学习教机器看懂世界
  • 基于springboot的网页时装购物系统(含源码)
  • BASE 原则
  • Redis如何实现高性能和高可用
  • C#中JSON字符串与Dictionary字典的相互转换方法
  • 【Oracle数据库进阶】004.SQL基础查询_聚合、分组、过滤、排序
  • C++对C的扩展(一)---作用域运算符和命名空间
  • 大数据开发电脑千元配置清单
  • 亚洲最具影响力人物颜廷利:心理健康对身体健康的重要影响
  • 高级java每日一道面试题-2024年10月15日-JVM篇-说一下JVM的主要组成部分?及其作用?
  • 【JS】数组详解
  • 异地多活(Active-Active Geo-Redundancy)
  • 洛谷 P1803:凌乱的yyy / 线段覆盖 ← 贪心算法
  • WIN11常用设置
  • Leetcode 227 Basic calculator
  • 阻塞队列相关的问题