判断链表是否有环
原题连接:https://leetcode-cn.com/problems/linked-list-cycle/description/
我最开始的方法是牺牲空间节约时间(然而是两个都为我的智商白白牺牲了);利用vector存储节点地址,然后遍历链表,利用find函数查找有没有相同的地址;提交之后通过是通过了,但是时间和空间都因为我的智商白白牺牲了。不甘心。不看别人的代码;继续想
想到,我干脆释放内存吧,只要释放出错就是有环了。那么怎么捕捉这个错误呢?这时候就要面向谷歌编程了,发现要用到信号,哎,信号我学过啊,一看,和Linux下的差不多啊。心里一阵窃喜,但是随即抽自己两巴掌,MD,不就是上环嘛,还要用信号捕捉?心灰意冷,还是看别人的代码吧,点开一看,细细一想,顿时惊为天人——我看不懂。哎卧槽,脑子不够用了,用笔代替一下吧,经过我的运算,嗯,,,想出这个方法的人甚叼;简单来说就是有两个人,一个跑得快,一个跑得慢,快的那个人的速度是慢的那个人的两倍,他们从同一个地方跑,如果是直线(无环),那他俩是碰不到一起了,如果转圈(有环),那这俩肯定能碰面啊,一碰面不就是有环了嘛,真是贼聪明;得劲!
---------------------------------------------------------------------------------------------------犹豫着要不要贴我的代码--------------------------------------------------------------------------------------------------------------
不上代码的博客都是耍流氓;我就只贴我的吧,大神的代码就不贴了,免得脏了大神的代码;
static int x = []() {
ios::sync_with_stdio(false); // cin与stdin禁止同步
cin.tie(NULL); //cin与cout解除绑定
return 0;
}();
class Solution {
public:
bool hasCycle(ListNode *head) {
if (head == NULL || head->next == NULL)
{
return false;
}
vector<ListNode*>temp;
ListNode *before = head, *after = head->next;
temp.push_back(before);
while (after)
{
before = after;
after = after->next;
if (temp.end() == find(temp.begin(), temp.end(), before))
{
temp.push_back(before);
continue;
}
else
{
return true;
}
}
return false;
}
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?