LeetCode 141. 环形链表
发布日期:2021-06-29 21:37:15
浏览次数:2
分类:技术文章
本文共 1459 字,大约阅读时间需要 4 分钟。
题目链接:
题目描述: 给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。
示例1:
输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。示例2:
输入:head = [1,2], pos = 0输出:true解释:链表中有一个环,其尾部连接到第一个节点。思路:这里提供两个方法。 法一:因为链表采用类似数组方式给出的,因此采用直接循环遍历的方式,实际上只需要用一个list或者set记录一下该节点是否出现过即可。
/** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */public class Solution { public boolean hasCycle(ListNode head) { HashSetset=new HashSet (); for(ListNode p=head;p!=null;p=p.next){ if(set.contains(p)) return true; set.add(p); } return false; }}
法二:采用快慢指针,初始都位于头节点,然后快指针走两步慢指针走一步,这样两个链表中有环必定快慢指针会在环上相遇。
代码:/** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */public class Solution { public boolean hasCycle(ListNode head) { if(head==null||head.next==null) return false; ListNode fastNode=head; ListNode slowNode=head; while((fastNode.next!=null)&&(fastNode.next.next!=null)){ fastNode=fastNode.next.next; slowNode=slowNode.next; if(fastNode==slowNode){ return true; } } return false; }}
转载地址:https://dh-butterfly.blog.csdn.net/article/details/108444478 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2024年04月10日 23时17分23秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
redis安装
2021-07-03
Mysql常见的存储引擎及比较
2021-07-03
android Context家族及详解
2021-07-03
android CrashHandler处理异常
2021-07-03
android 问题小记
2021-07-03
android productFlavors多马甲打包
2021-07-03
android 搭建本地maven库
2021-07-03
android mac搭建Nexus3.+私有maven
2021-07-03
android RecyclerView实现柱状图
2021-07-03
OPPO崩溃问题解决
2021-07-03
Glide4.0+使用
2021-07-03
Glide遇到的问题与解决方法
2021-07-03
记ViewStub的一个问题
2021-07-03
okhttp实现连接池原理
2021-07-03
android LeakCanary原理解析
2021-07-03
Glide 4.0+源码分析
2021-07-03
android 取消黑暗模式
2021-07-03
android ViewFlipper实现跑马灯
2021-07-03
Mac 搭建Groovy环境
2021-07-03