142. 环形链表 II(中等)

news2025/1/18 18:57:35

142. 环形链表 II

  • 1. 题目描述
  • 2.详细题解
  • 3.代码实现
    • 3.1 Python
      • 哈希表
      • 快慢指针
    • 3.2 Java
      • 哈希表
      • 快慢指针

1. 题目描述

题目中转:142. 环形链表 II

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

2.详细题解

    判断链表是否形成了环路,非常常规和直观的思路是,依次遍历每个结点并记录下来,当再次遍历到此前遇到过的结点,那么就可以判断存在环路,借助哈希表可以很方便的实现.
  该题进阶要求常量内存空间,哈希表方法虽然简单但需要使用额外的内容空间,那么该如何进一步解决呢?在现实生活中,两个人同时同地同向跑步,当两人再次相遇的时候,跑得块的人一定比跑得慢的人多跑的距离是整数圈。同理,如果是链表中有环,那么如果两个指针的速度不一致,那么这二者终将相遇,因此可以使用双指针,一个慢指针,一个快指针实现链表是否有环的判断:如果有环,二者终将相遇,如果没有环,快指针先到链尾,为便于计算,快慢指针速度为2:1。
  假设链表环外的长度为A,环的长度为B,第一次相遇时距离入环点的距离为x,那么此时慢指针走过的距离为:A+x,快指针假定已绕环n圈(n>=1),快指针距离为:A+nB+x;快指针走过的距离为慢指针的2班,因此有等量关系:A+nB+x = 2(A+x),可以化简为:A=nB-x,由此可见,外环的距离等于n圈环长减去第一次距离入环点的距离。当快慢指针第一次相遇时,同时增加第三个指针再从头开始移动到入环点,移动距离为A,此时慢指针走过的距离为nB-x;第三个指针开始移动时,为慢指针的位置是在第一次相遇点(距离入环处距离为x),第三个指针到入环点时,此时慢指针恰好也同时回到入环点(第三个指针走A,慢指针走了A=nB-x),慢指针和第三个指针将再次相遇,因此可以确定出入环位置。当快慢指针第一次相遇时,不再需要快指针了,因此可以借助快指针充当第三个指针,每次移动距离为1.

3.代码实现

3.1 Python

哈希表

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def detectCycle(self, head: Optional[ListNode]) -> Optional[ListNode]:
        existed = set()
        ptr = head
        while ptr:
            if ptr in existed:
                return ptr
            existed.add(ptr)
            ptr = ptr.next
        return None

在这里插入图片描述

快慢指针

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def detectCycle(self, head: Optional[ListNode]) -> Optional[ListNode]:
        slow, fast = head, head
        while fast is not None:
            slow = slow.next
            if fast.next is None:
                return None
            fast = fast.next.next
            if fast == slow:
                fast = head
                while fast != slow:
                    fast = fast.next
                    slow = slow.next
                return slow

在这里插入图片描述

3.2 Java

哈希表

/**
 * Definition for singly-linked list.
 * class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    public ListNode detectCycle(ListNode head) {
        Set<ListNode> existed = new HashSet<>();
        ListNode ptr = head;
        while (ptr != null) {
            if (existed.contains(ptr)) {
                return ptr;
            }
            existed.add(ptr);
            ptr = ptr.next;
        }
        return null;
    }
}

在这里插入图片描述

快慢指针

/**
 * Definition for singly-linked list.
 * class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    public ListNode detectCycle(ListNode head) {
        ListNode slow = head, fast = head;
        while (fast != null){
            slow = slow.next;
            if (fast.next == null){
                return null;
            }
            fast = fast.next.next;
            if (fast == slow){
                fast = head;
                while (fast != slow){
                    fast = fast.next;
                    slow = slow.next;
                }
                return slow;
            }
        }
        return null;
    }
}

在这里插入图片描述

  执行用时不必过于纠结,对比可以发现,对于python和java完全相同的编写,java的时间一般是优于python的;至于编写的代码的执行用时击败多少对手,执行用时和网络环境、当前提交代码人数等均有关系,可以尝试完全相同的代码多次执行用时也不是完全相同,只要确保自己代码的算法时间复杂度满足相应要求即可,也可以通过点击分布图查看其它coder的code

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1848021.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

我的Mac疯了!居然可以生成这样的奇葩AI图片!

在当今人工智能领域&#xff0c;midjourney无疑是生成图片的王者&#xff0c;但是苦于付费才能使用&#xff0c;今天我就给大家分享一下midjourney平替stable diffusion&#xff0c;实现本地生成不逊色于midjourney的图片 效果图 先上一个我自己生成的效果(就是在我的Mac上用C…

内江科技杂志内江科技杂志社内江科技编辑部2024年第13期目录

科教兴国 内江市科技局“五个强化”助力“五经普”工作有序推进 本刊通讯员; 1 内江市多措并举融入成渝中线科创走廊建设 本刊通讯员; 2 科学管理《内江科技》投稿&#xff1a;cnqikantg126.com 数字化社会公共图书馆的服务效能提升策略研究 闫永凤;臧萌;王亚博;王…

Uniapp App 微信登录苹果登录

核心逻辑&#xff0c;通过第三方登录获取唯一值&#xff08;openId | userId&#xff09;&#xff0c;调接口获取此唯一值对应的账号&#xff0c;如果未绑定跳转绑定页 微信授权返回的是一个会变的code&#xff08;每次都不一致&#xff09;&#xff0c;需要调用微信相关api换取…

二分练习题(C. Earning on Bets)

二分练习题&#xff08;C. Earning on Bets&#xff09; 原题链接&#xff1a;点击此处 Earning on Bets 题面翻译 有人提议让您玩一个游戏。在这个游戏中&#xff0c;有 n n n 种可能的结果&#xff0c;对于每一种结果&#xff0c;您都必须下注一定整数的硬币。如果 i …

永辉超市:胖东来爆改,成色几何?

单日业绩暴涨14倍。来&#xff0c;看看&#xff0c;这是被胖东来爆改后重新开业后的门店&#xff0c; 不出意外的流量爆炸。胖东来爆改&#xff0c;真是解决实体商超困境的灵丹妙药吗&#xff1f; 今天我们聊聊——永辉超市 最近两年实体商超日子都不好过&#xff0c;去年13家…

36 - shell之sed

sed grep就是查找文本当中的内容&#xff0c;扩展正则表达式。 一、sed 1.1、sed的定义 sed是一种流编辑器&#xff0c;一次处理一行内容。 如果只是展示&#xff0c;会放在缓冲区&#xff08;模式空间&#xff09;&#xff0c;展示结束&#xff0c;会从模式空间把结果删除…

约束求解器方案设计

1.约束求解介绍 给定一个几何对象&#xff08;点、直线段、圆、圆弧、平面等&#xff09;的集合G和一个关于集合G中几何对象之间约束&#xff08;点的位置、直线段的长度、圆弧对应的圆心角角度、垂直、相切等&#xff09; 的集合C&#xff0c;则在二元组(G&#xff0c;C)中根…

探索全球奇趣,开启你的海外盲盒app开发之旅!

在追求个性化和独特体验的今天&#xff0c;你是否渴望拥有一款能够带你穿越国界、领略世界各地新奇好物的App&#xff1f;为了满足广大用户对于未知的好奇与探索欲望&#xff0c;我们精心打造了一款海外盲盒App&#xff0c;带你踏上一段充满惊喜的全球购物之旅。 一、产品介绍…

DVWA 靶场 Authorisation Bypass 通关解析

前言 DVWA代表Damn Vulnerable Web Application&#xff0c;是一个用于学习和练习Web应用程序漏洞的开源漏洞应用程序。它被设计成一个易于安装和配置的漏洞应用程序&#xff0c;旨在帮助安全专业人员和爱好者了解和熟悉不同类型的Web应用程序漏洞。 DVWA提供了一系列的漏洞场…

山东济南比较出名的起名大师的老师,中国最厉害的改名大师颜廷利:短命的小草,年年自损;长寿的大树,万古长青。。。(升命学说)

在中国第一起名大师的老师颜廷利教授的《升命学说》中&#xff0c;通过“净化论”、“和合法则”、“唯悟主义”以及“镜正理念”的阐述&#xff0c;我们得以窥见生命的不同维度。他以自然界中短命的小草与长寿的大树为例&#xff0c;揭示了生命形态的对比与哲理。 小草&#…

106、从中序与后序遍历序列构造二叉树

给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 提示: 1 < inorder.length < 3000postorder.length inorder.length-3000 < inorder[i]…

远程医疗软件到底哪个好用?

随着科技进步的不断推进&#xff0c;远程医疗已经成为现代医疗体系的一个重要支柱。远程医疗软件&#xff0c;通过网络通信技术的运用&#xff0c;打破了地理限制&#xff0c;实现了医疗资源的有效整合与共享&#xff0c;为民众提供了前所未有的便捷高效的医疗服务体验。那么&a…

期末考后怎样发成绩?

老师们&#xff0c;下周可就是期末考啦&#xff0c;又到了头疼发成绩的时候了。每当这个时候&#xff0c;家长们总是急切地咨询孩子的考试表现&#xff0c;向老师们询问成绩。这种场景几乎成了每学期结束时的常态。 别担心&#xff0c;我来安利一个超棒的工具——“易查分小程序…

跨境多账号需知:指纹浏览器需要用独立IP吗?

指纹浏览器也成为反检测浏览器&#xff0c;旨在安全管理多个账户。在跨境多账号中&#xff0c;多个账号容易引发网站怀疑并最终导致大量账户被暂停&#xff0c;使用反检测浏览器的主要目的是通过创建新的浏览器指纹来隐藏用户的真实浏览器指纹。 但浏览器指纹并不是网站关注的唯…

拒绝吸烟,远离慢阻肺——朗格力复合营养素助力守护肺部健康

#肺科营养#朗格力#班古营养#复合营养素#肺部营养#肺部健康# 你知道吗?慢阻肺这一疾病在我国的患者数量已突破亿级大关,尤其在40岁以上的成年人中,平均每7个人中就有1位可能受其困扰。然而,很多人对慢阻肺的严重性认识不足,常常将其视为一种普通的咳嗽或喘息,忽视了它潜在的危…

为什么伦敦金新手不能用一小时图及以下的时间周期?

刚进入伦敦金市场的投资者&#xff0c;一般不建议使用较低的时间周期&#xff0c;如1小时图或以下。不仅如此&#xff0c;新手或者兼职投资者会被要求使用较高的时间周期交易&#xff0c;如4小时图或日线图&#xff0c;这有什么道理呢&#xff1f;下面我们就来讨论一下。 新手的…

C++初学者指南第一步---11.字符串(基础)

C初学者指南第一步—11.字符串&#xff08;基础&#xff09; 文章目录 C初学者指南第一步---11.字符串&#xff08;基础&#xff09;1. std::string2. char std::string的元素类型3. std::string字符串操作4. 字面量4.1 C风格字符串字面量4.2 "std::string 字面量"s…

河南大学24计算机考研数据,有三个学院招收计算机相关专业,都是考的408!

河南大学&#xff08;Henan University&#xff09;&#xff0c;简称“河大”&#xff0c;是河南省人民政府与中华人民共和国教育部共建高校&#xff0c;国家“双一流”建设高校&#xff0c;入选国家“111计划”、中西部高校基础能力建设工程、卓越医生教育培养计划、卓越法律人…

DBeaver通过jdbc方式连接ES(免证书)

前言 之前其实已经分享过DBeaver连接ES,为什么重新分享一篇,用过的肯定知道,之前那种方式需要ES服务的服务器上装证书,免费证书只能用一个月。这次分享的就是解决这个时间限制问题,但是需要用一个自己开发的jar,而且暂未上到maven的中心库。 一、先看效果 证书方式 自研…

【R语言】地理探测器模拟及分析(Geographical detector)

地理探测器模拟及分析 1. 写在前面2. R语言实现2.1 数据导入2.2 确定数据离散化的最优方法与最优分类2.3 分异及因子探测器&#xff08;factor detector&#xff09;2.4 生态探测器&#xff08;ecological detector&#xff09;2.5 交互因子探测器&#xff08;interaction dete…