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

lc hot 100之:环形链表

链表的题目感觉很多的思路都是【快慢双指针】或【三状态指针】:pre, cur, next.

分享几题lc hot 100的链表题目~

第一题:

首先直接的思路是:如何判断下一个指针指向的链表已被访问过?即访问到了已访问的值

方法一:【哈希表】,这里用的是unordered_set

class Solution {
public:bool hasCycle(ListNode *head) {if(head==NULL){return false;}// ListNode* cur=head;unordered_set<ListNode*>m;while(head!=NULL){if(m.count(head))return true;m.insert(head);head=head->next;}return false;}
};

这个方法有额外空间。

方法二:快慢指针

这个方法比较巧妙,空间复杂度为o(1),所以应该要在链表本身上想办法。这个思路在找链表中点中也有类似(快慢指针,快的到末尾时慢的到中间)。

题解中形容为“龟兔赛跑”:在同一个跑道上,如果有环的情况下,快的兔子一定会和慢的龟相遇。还可以类比“相对速度”(比较难想到hh)

 如果无环的话,fast->next为空就出界咯~

class Solution {
public:bool hasCycle(ListNode *head) {ListNode* fast=head;ListNode* slow=head;//注意,同时从起点出发while(fast&&fast->next){fast=fast->next->next;slow=slow->next;//先跑再比if(fast==slow)return true;}return false;}
};

有两个细节是:同时从起点出发+先后移指针再比较是否相遇。 

留几个我还没想明白的问题吧:为什么只能比较内存地址是否一致,不能比较节点的 val?(我试了会报错)
还有有两个细节是:同时从起点出发+先后移指针再比较是否相遇。,这里能否再解释下?如果快慢指针的初始值一个是head,一个是head->next为什么会出错呢?

http://www.dtcms.com/a/211391.html

相关文章:

  • Redis 常用命令
  • 005 深度优先搜索(DFS)算法详解:图解+代码+经典例题
  • Linux命令简介
  • ByteCTF2021 BabyDroid WP
  • RAM(随机存取存储器)的通俗解释及其在路由器中的作用
  • 推荐系统里真的存在“反馈循环”吗?
  • 前端表单中 `readOnly` 和 `disabled` 属性的区别
  • PHP SPL 自动加载机制详解与实战应用:spl_autoload_register 使用指南
  • σ 滤波器(Sigma Filter)基本原理及其优化版本介绍
  • Python爬虫开发基础案例:构建可复用的名言采集系统
  • 介绍一下什么是反射(面试题详细讲解)
  • P3392 涂条纹
  • VILT模型阅读笔记
  • 3.5/Q1,Charls最新文章解读
  • 广东省省考备考(第十九天5.24)—申论(听课后强化训练)
  • 超时处理机制设计:从TICK到回调
  • JavaSE常用API之Object类:Java万物之基
  • AI知识库
  • Day126 | 灵神 | 二叉树 | 层数最深的叶子结点的和
  • 【java】小练习--零钱通
  • DataFrame 和 Dataset的对比理解
  • vue2中el-table 实现前端分页
  • 第十五章:数据治理之数据目录:摸清家底,建立三大数据目录
  • 大数据如何让智能物流和仓储管理更高效?从预测到自动调度
  • Qwen2.5 VL 语言生成阶段(4)
  • 【Python 中 lambda、map、filter 和 reduce】详细功能介绍及用法总结
  • 2025年上半年软件架构师考试回忆版【持续更新】
  • VS编码访问Mysql数据库
  • spike:一款协议模糊测试器工具包!全参数详细教程!Kali Linux教程!
  • 构建跨平台C/C++项目的基石:现代构建套件设计指南