数据结构每日一题|判断链表是否有环型结构

仅记录学习思路 题目均来自力扣

思路:如果链表里面存在环形结构的话,则遍历链表是不会有头的,会一直循环下去。

画图理解可以看出在链表未来的某处一旦进入环形循环后就会一直在环形结构里无限绕圈,我们中学时期曾学过追击问题,所以我们可以想到我们的老朋友快慢两个指针都进入这个循环后相当于开始了一场封闭场地的追击问题。

我们可以设快指针的移动速度是B的两倍,在循环里,他们终究会在某一个节点相遇的。这个时候比较他们即可,可是比较什么呢,最开始我想到的是比较节点的值的大小,判断相等后再比较下一个节点,可是这就有一个问题,就算这真的是个圆环结构,那么比较到什么时候是个头呢,最后才想到直接比较两个指针,在第一次相遇的时候,快指针肯定是在前面的某个节点进入了环形结构重新返回了回来和慢指针相遇,即指向同一个地方,所以,如果直接比较二者是否相等即可判断。

cpp 复制代码
 //判断是否为环型链表
 bool hasCycle(struct ListNode* head) {
     ListNode* fast = head;//快指针 每次走两步
     ListNode* slow = head;//慢指针 每次走一步
     //如果有环,则快慢指针肯定会相遇,反之则不相遇。
    
     while (fast->next&&fast)
     {
         fast = fast->next->next;
         slow = slow->next;
         if (fast == slow)
         {
             return true;
         }
     }
     return false;
 }
相关推荐
前端开发爱好者9 分钟前
前端新玩具:Vike 发布!
前端·javascript
今天也是爱大大的一天吖12 分钟前
vue2中的.native修饰符和$listeners组件属性
前端·javascript·vue.js
fxshy16 分钟前
在 Vue 3 + Vite 项目中使用 Less 实现自适应布局:VW 和 VH 的应用
前端·javascript·less
奇舞精选19 分钟前
AI时代的前端知识拾遗:前端事件循环机制详解(基于 WHATWG 最新规范)
前端·javascript
墨雪不会编程25 分钟前
数据结构—排序算法篇二
数据结构·算法·排序算法
AI3D_WebEngineer1 小时前
企业级业务平台项目设计、架构、业务全解之组件库篇
前端·javascript·vue
ShineWinsu1 小时前
对于数据结构:堆的超详细保姆级解析—上
数据结构·c++·算法·计算机·二叉树·顺序表·
浪裡遊1 小时前
Next.js路由系统
开发语言·前端·javascript·react.js·node.js·js
gihigo19983 小时前
使用JavaScript和Node.js构建简单的RESTful API
javascript·node.js·restful
一位搞嵌入式的 genius3 小时前
前端实战开发(三):Vue+Pinia中三大核心问题解决方案!!!
前端·javascript·vue.js·前端实战