判断单链表是否有环
判断单链表是否有环
使用快慢指针的方式判断链表十分有环。
public ListNode detectCycle(ListNode head) {
if(head == null) return null;
//定义快慢指针
ListNode fast_P = head, slow_P = head;
//只要后面有路,两指针就继续追逐
while(fast_P.next != null && fast_P.next.next != null ){
//移动
fast_P = fast_P.next.next;
slow_P = slow_P.next;
//判断是否相遇
if(fast_P == slow_P){
//相遇证明有环,有环就需要找环开始的位置
//存在关系:相遇点到环的第一个节点距离==链表节点到环的第一个节点距离
ListNode p = head;
while(slow_P != p) {
slow_P=slow_P.next;
p=p.next;
}
return p;
}
}
//没有环,快指针肯定先遇到null,跳出循环,返回null即可
return null;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)