给定一个链表,判断链表中是否有环。

如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。

如果链表中存在环,则返回 true 。 否则,返回 false 。

进阶:
你能用 O(1)(即,常量)内存解决此问题吗?

示例 1:
输入:head = [3,2,0,-4], pos = 1
输出:true
解释:链表中有一个环,其尾部连接到第二个节点。

示例 2:
输入:head = [1,2], pos = 0
输出:true
解释:链表中有一个环,其尾部连接到第一个节点。

示例 3:
输入:head = [1], pos = -1
输出:false
解释:链表中没有环。

参考代码

总结:

  1. 了解了java中的几种像hashSet,Stack等结构
  2. 开始自己想的是集合法,并且类型指定为Integer即可,不占内存嘛,
    但是发现如果有相同的数但又不存在环怎么办,所以最后只能使用节点来判断
  3. 第一种方法很巧妙其实就有点像高中物理的追击问题,但是最开始p2.next != null一直没有想明白,最后画图发现了代码中的解释,所以一定要多动笔多画,把自己当做是解决问题的机器,解决问题
  4. 观阴阳之开阖以名命物,知存亡之门户,筹策万类之始终,达人心之理,变化之朕焉,而守司其门户。故圣人之在天下也,自古及今,其道一也。变化无穷,各有所归,或陰或陽,或柔或刚,或开或闭,或驰或张。

参考代码

    public boolean hasCycle(ListNode head) {/**第一种方法快慢指针*//*总体思想:其实就是每次快慢(p1,p2)指针的差距增加1,只要有环两者一定会相遇* 相当于物理当中的追击问题 或者说是 两个人围绕操场跑步*/
//        if (head == null) {//            return false;
//        }
//        ListNode p1 = head;
//        ListNode p2 = head.next;
//        /*为什么p2.next != null,因为p2 = p2.next.next需要成立就得有这个,
//        *如果p2.next != null, 可能会有
//        * 1. p2.next后面没有元素,则此时p2 = p2.next.next为null,是符合规范的
//        * 2.p2.next后面有元素,则此时p2 = p2.next.next为某个元素这个很好理解*/
//        while ((p1 != null) && (p2 != null) &&(p2.next != null)) {//            p1 = p1.next;
//            p2 = p2.next.next;
//            if (p1 == p2) {//                return true;
//            }
//        }
//        return false;/**第二种方法:集合法(思路好理解)* 思路总结:把结点放入到一个hastSet中如果存在 则一定存在环 因为都有相同的结点了很好理解* 但是由于每一次放入节点都需要比较,所以自然速度很慢* 并且还开辟了一定的空间*/if (head == null) {return false;}HashSet<ListNode> hashSet = new HashSet<>();while (head != null) {/*如果当前节点已经包含,返回false;否则放入集合*/if (hashSet.contains(head)) {return true;}hashSet.add(head);head = head.next;}return false;}

2021年9月19日

题目来源力扣链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xnwzei/

给定一个链表,判断链表中是否有环相关推荐

  1. 给定一个字符串,判断该字符串中是否包含某个子串.如果包含,求出子串的所有出现位置. 要求:从键盘输入两个字符串,第一个是给定的字符串,第二个是子串。

    给定一个字符串,判断该字符串中是否包含某个子串.如果包含,求出子串的所有出现位置. 要求:从键盘输入两个字符串,第一个是给定的字符串,第二个是子串. 输入 abcd23abc34bcd bc 输出 1 ...

  2. 给定一个整数判断是否为素数_Ruby程序检查给定数字是否为素数

    给定一个整数判断是否为素数 检查素数 (Checking prime number) Before getting into writing the code, let us understand w ...

  3. jquery判断方法是否存在_判断图中是否有环的三种方法

    0.什么是环? 在图论中,环(英语:cycle)是一条只有第一个和最后一个顶点重复的非空路径. 在有向图中,一个结点经过两种路线到达另一个结点,未必形成环. 1.拓扑排序 1.1.无向图 使用拓扑排序 ...

  4. aop判断方法是否执行成功_判断图中是否有环的三种方法

    0.什么是环? 在图论中,环(英语:cycle)是一条只有第一个和最后一个顶点重复的非空路径. 在有向图中,一个结点经过两种路线到达另一个结点,未必形成环. 1.拓扑排序 1.1.无向图 使用拓扑排序 ...

  5. 判断图中是否存在环的方法

    判断图中是否存在环一般有四种方法:① 拓扑排序(对于有向图来说的),一般会结合dp求解最长/短路径: ② 强连通分量算法/双连通分量算法: ③ spfa判环 :④ 直接dfs遍历一遍,在遍历节点的过程 ...

  6. 链表--判断链表中是否有环

    题目: 判断给定的链表中是否有环.如果有环则返回true,否则返回false. 数据范围:链表长度 0≤n≤10000,链表中任意节点的值满足 ∣val∣<=100000 要求:空间复杂度 O( ...

  7. LeetCode141. 环形链表判断链表是否有环

    题目要求 原题目链接:141. 环形链表 题目要求如下: 给你一个链表的头节点 head ,判断链表中是否有环. 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环. 为了 ...

  8. Android中给定一个日期判断是周几.

    1.代码: String strDate = "2016-09-28";// 日期字符串  SimpleDateFormat format = new SimpleDateForm ...

  9. 给定一个非负整数num,范围中的每个数字i 计算其二进制中1的个数

    输入:3 输出:0,1,1,2 法一 num=int(input()) numlist=[] reslist=[] #1.1输入0 if num==0:reslist.append(bin(0)) # ...

  10. 2道编程题:1.给定一个字符串,计算字符串中数值的个数并求和。

    // 转载于:https://www.cnblogs.com/BlueBlue-Sky/p/8495420.html

最新文章

  1. matlab在输电线路故障测距中应用,Matlab在输电线路故障测距中的应用.doc
  2. SQL Server2008附加数据库之后显示为只读时解决方法
  3. 基于嗅探原理的原始套接字木马
  4. wcf分布式构架集群案例解决方案
  5. python内嵌函数和闭包与java 匿名内部类_Java匿名内部类构造原理分析
  6. 介绍一个小工具 Linqer
  7. Jenkins 教程(一)实现自动化打包及邮件通知
  8. IoC 之 2.2 IoC 容器基本原理(贰)
  9. Java虚拟机 --- 内存区域
  10. 框架学习笔记:Unity3D的MVC框架——StrangeIoC
  11. CC2500大功率无线模块
  12. LeCun、Bengio、Hinton三巨头曾合体,Nature发文综述深度学习(论文精华)
  13. 如何将多个文件的简体中文名快速翻译成繁体中文
  14. 纳米机器人最新进展(2021年)
  15. 必背C语言算法 C语言求自然底数e
  16. vba 跳出for循环_ExcelVBA的三重FOR循环退出
  17. Android视频背景,动态背景,Android用视频做背景的轻松实现
  18. 元宇宙虚拟数字人系统
  19. 双曲三角函数图像及计算
  20. C++中map的遍历

热门文章

  1. 基于BlackFriday.csv的电商数据集,简要数据分析
  2. Linux---------安装以及基本语法知识
  3. 专业计算机基础教学,计算机基础教学计划范文五篇
  4. vsftpd设置被动模式_Linux下vsftp怎么设置被动模式?
  5. SuperMarketSys_SSM超市管理系统(Spring+SpringMVC+Mybatis)
  6. 25000 字详解 23 种设计模式(多图 + 代码)
  7. 前端图片渲染性能优化与实践 — 图片懒加载
  8. IOS手机安装旧版APP(不要问我为什么安装旧版,有的旧版功能更强大)
  9. 「镁客·请讲」脑穿越黄庄:过分乐观和激情之后,行业需要找到VR不可替代之处...
  10. oracle with as用法