LeetCode 141. 环形链表 快慢指针
地址 https://leetcode-cn.com/problems/linked-list-cycle/
给定一个链表,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。 如果链表中存在环,则返回 true 。 否则,返回 false 。 进阶: 你能用 O(1)(即,常量)内存解决此问题吗?
算法1
快慢指针 如果没达到终点 而且还相遇了
那么肯定存在链表环
C++ 代码
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: bool hasCycle(ListNode *head) { ListNode* p1= head; ListNode* p2 = head; while(p1!=NULL && p2 != NULL){ p1 = p1->next; if(p1== NULL) return false; p2=p2->next; if(p2==NULL) return false; p2=p2->next; if(p2==NULL) return false; if(p1 == p2) return true; } return false; } };
class Solution { public: ListNode* GetNext(ListNode *p){ if(p==NULL) return NULL; if(p->next==NULL) return NULL; return p->next; } bool hasCycle(ListNode *head) { ListNode * p1 = head; ListNode * p2 = head; p1 =GetNext(p1); p2 =GetNext(p2); p2 =GetNext(p2); while(p1!=p2 && p1!=NULL && p2!=NULL){ p1 =GetNext(p1); p2 =GetNext(p2); p2 =GetNext(p2); } if(p1==NULL) return false; if(p2==NULL) return false; if(p1==p2) return true; return false; } };
哈希代码
逐个遍历链表或者链表环 查找哈希表中是否已经记录该地址 就可以判断是否已经进入环形循环了
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: bool hasCycle(ListNode *head) { unordered_set<ListNode*> ss; ListNode* p = head; while(p != NULL){ if(ss.count(p)!=0) return true; ss.insert(p); p= p->next; } return false; } };
作 者: itdef
欢迎转帖 请保持文本完整并注明出处
技术博客 http://www.cnblogs.com/itdef/
B站算法视频题解
https://space.bilibili.com/18508846
qq 151435887
gitee https://gitee.com/def/
欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
如果觉得不错,欢迎点赞,你的鼓励就是我的动力
欢迎转帖 请保持文本完整并注明出处
技术博客 http://www.cnblogs.com/itdef/
B站算法视频题解
https://space.bilibili.com/18508846
qq 151435887
gitee https://gitee.com/def/
欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
如果觉得不错,欢迎点赞,你的鼓励就是我的动力


【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
2019-10-09 leetcode 34. 在排序数组中查找元素的第一个和最后一个位置
2016-10-09 图灵社区 书单推荐:成为Java顶尖程序员 ,看这11本书就够了