首页 > 其他分享 >环形链表问题

环形链表问题

时间:2023-12-31 11:34:03浏览次数:52  
标签:问题 head 环形 fast next 链表 null 指针

链表

环形链表问题

思路来源

一周刷爆LeetCode,算法大神左神(左程云)耗时100天打造算法与数据结构基础到

笔记内容

  • 问题来源:基于力扣141题进行拓展

  • 问题描述:

    给你一个链表的头节点 head ,判断链表中是否有环。

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

    如果链表中存在环 ,则返回环开始点。 否则,返回null 。

  • 算法思路:

    • 快慢指针

      快指针一次走两步,慢指针一次走一步。若快指针到达终点,链表无环;否则两个指针将相遇。当相遇情况出现,快指针回到链表开头,慢指针留在相遇结点。两个指针按照一次一步进行移动,当两个指针再次相遇,该结点为环开始点。

    • 哈希表

      指针移动,查询当前结点是否已在哈希表中。没有则添加,有返回该环开始点。若指针为null,链表无环。

  • 代码实现

    //快慢指针
        public ListNode hasCycle(ListNode head) {
            if(head == null || head.next == null || head.next.next == null){
                return null;
            }
            ListNode slow = head.next;
            ListNode fast = head.next.next;
            while (slow != fast){
                if(fast.next == null || fast.next.next == null){return null;}
                slow = slow.next;
                fast = fast.next.next;
            }
            fast = head;
            while (slow != fast){
                fast = fast.next;
                slow = slow.next;
            }
            return fast;
        }
    
    //哈希表
        public ListNode hasCycle1(ListNode head) {
            HashSet hashMap = new HashSet();
            while (head != null){
                if(hashMap.contains(head)){
                    return head;
                }
                hashMap.add(head);
                head = head.next;
            }
            return null;
        }
    

标签:问题,head,环形,fast,next,链表,null,指针
From: https://www.cnblogs.com/nouleeee/p/17937332

相关文章

  • Android Studio Build窗口出现中文乱码问题
    问题:Androidstudio使用时,报错出现提示乱码问题,无法查看具体报错问题,如图解决方法:可点击studio状态栏的Help—>EditCustomVMOptions,操作如下图在文件后面添加-Dfile.encoding=UTF-8(要注意不能有空格,否则studio可能打不开)添加完成后重启AndroidStudio,就可以看到......
  • 【Redis】一文掌握Redis原理及常见问题
    Redis是基于内存数据库,操作效率高,提供丰富的数据结构(Redis底层对数据结构还做了优化),可用作数据库,缓存,消息中间件等。如今广泛用于互联网大厂,面试必考点之一,本文从数据结构,到集群,到常见问题逐步深入了解Redis,看完再也不怕面试官提问!高性能之道单线程模型基于内存操作epoll多......
  • 【MySQL】一文看懂MySQL所有常见问题
    MySQL作为一款开源关系型数据库,如今绝对是占据关系型数据库的主导地位,不仅是面试中的常客,也是日常工作中最主要接触的数据库。因此,无论是背面试八股,还是工作使用,都是一定要深度掌握的一个知识点。今天就用一篇文章讲清楚MySQL的所有问题着急的小伙伴可直接跳到最后MySQL常见面试......
  • 解决 typescript node tsx 的兼容问题
    问题在项目中使用typescript+tsx+node存在各种兼容问题,包括:[esbuildError]:Top-levelawaitiscurrentlynotsupportedwiththe"cjs"outputformatCannotfindmodule'X'.Didyoumeantosetthe'moduleResolution'optionto'......
  • 【数据结构】链式家族的成员——循环链表与静态链表
    循环链表与静态链表导言大家好!很高兴又和大家见面啦!!!经过前面的介绍,相信大家对链式家族的成员——单链表与双链表的相关内容都已经熟练掌握了。前面我们重点介绍了通过C语言来实现单链表与双链表的一些基本操作,希望大家私下能够多多练习一下,帮助自己去吸收消化这些内容。在今天的篇......
  • FindBugs问题EQ_COMPARETO_USE_OBJECT_EQUALS的解决方法
    本文记录的是2016年4月初发生的事情。前几天,标准CI的静态检查页面发现一个项目组同事引入的FindBugs问题,EQ_COMPARETO_USE_OBJECT_EQUALS,CI对这个问题给出的介绍如下ClassdefinescompareTo(...)andusesObject.equals()同事没见过这个问题,不了解如何修改,于是在中午回基......
  • 代码随想录day04 两两交换链表中的节点 删除链表的倒数第N个节点 链表相交 环形链表
    两两交换链表中的节点题目:这题画一下链表会比较清晰写写画画指针位置很快就可以写出来一开始以为一个tmp就够用了写着写着发现需要多一个代码:删除链表的倒数第N个节点:没什么思路只好先看看视频思路视频思路很简单也很清晰只需要两个指针一快一慢两指针的间......
  • HTTP协议安全头部X-Content-Type-Options引入的问题
    本文于2016年4月完成,发布在个人博客网站上。考虑个人博客因某种原因无法修复,于是在博客园安家,之前发布的文章逐步搬迁过来。前段时间测试MM反馈了一个问题,在富文本编辑器里上传的图片无法正常呈现。因为Jackie在本机的环境上没有观察类似的现象,而恰好那天测试环境的某个重要配......
  • 工作中的问题汇总
    1.1序1.2java通用java动态调用webSericessh+junit测试1.3前端easyui服务端与客户端排序easyui-datagrid实现通用编辑jsjs中的false1.4c#1.5c++......
  • 关于项目中遇到的一个loadsh中_.get()方法的一个小问题
    背景:同事最近找我看一个bug,起因是我们公司产品中心写的公共的列表组件在新增数据保存的时候报错,错误如下Invalidattempttospreadnon-iterableinstance(传播不可迭代的无效尝试)查了下网上说很大可能是因为扩展运算符出错导致的,我也比较倾向于这种解释,但是产品中心这个组件已......