python_ACM模式《剑指offer刷题》链表4

题目:

面试tips:

询问是否需要判断环,可微调下方代码。

思路:

思路一:

判断环是否存在:设定一快一慢指针,均从头节点出发,快指针一次走两步,慢指针一次走一步。若无环,则快指针会先到达空,返回False表示无环;若有环,则快慢指针必定相遇。前者无环快指针先到达空节点好理解,后者有环为什么快慢指针必定相遇呢?这里提供两种理解方式。

理解①:

理解②:

设慢指针刚进入环的第一个节点时,快指针(此时必定在环中)与慢指针中间相差n(n小于环的个数)个节点,则因为快指针每次走两步,慢指针每次走一步,因此快指针相对于慢指针而言快一步,因此在第n次时快指针追上慢指针。因此也是在慢指针的第一圈中被快指针追上。

               

若环存在,则寻找环的入口:

       

代码实现:

时复O(N),空复O(1)

class ListNode:
    def __init__(self, val, next = None):
        self.val = val
        self.next = next

def arr2List(arr, pos):
    prev = dummy_head = ListNode(0)
    entry = None
    for i in range(len(arr)):
        node = ListNode(arr[i])
        prev.next = node
        prev = prev.next
        entry = node if pos == i else entry
        if i == len(arr)-1:
            node.next = entry
    return dummy_head.next

def findcycle(head):
    # 找到环的入口
    # 1 先找到快慢指针相遇之处
    if not head: # 这里先排除掉空节点 是因为后面要fast.next 不能对空指针操作
        return -1
    left = fast = slow = head
    while fast.next and fast.next.next:
        fast = fast.next.next
        slow = slow.next
        if fast == slow:
            # 此时slow记录了相遇位置
            break
    if not fast.next or not fast.next.next:
        return -1
    # left和slow同时走直到相遇
    while left != slow:
        left = left.next
        slow = slow.next
    return left


if __name__ == '__main__':
    arr = [2, 6, 1, 5]
    pos = 1
    # pos表示环的入口索引,如果pos不为arr中的任一下标,则无环
    head = arr2List(arr, pos)
    result = findcycle(head)
    if result == -1:
        print('链表无环')
    else:
        print('环入口节点为:{}'.format(result.val))

参考资料:

1. 《剑指offer》

2. 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何本地部署hMailServer邮件服务并实现远程发送邮件【内网穿透】

🔥博客主页: 小羊失眠啦. 🎥系列专栏:《C语言》 《数据结构》 《C》 《Linux》 《Cpolar》 ❤️感谢大家点赞👍收藏⭐评论✍️ 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默&…

CDS view与替代对象

一,简介 替代对象是指用一个CDS view指派给一个透明表或常规数据库视图,使得透明表或常规数据库视图的访问重定向到该CDS view。 替代有诸多要求: 字段数量一致且同名对应,顺序可以不一致对应的字段数据类型长度等必须一致CDS v…

AJAX-接口文档

接口文档:由后端提供的描述接口的文章 接口:使用AJAX和服务器通讯时,使用的URL,请求方法,以及参数 1.请求参数的位置为query(查询)的时候,就说明要使用params写为查询参数 2.请求参…

unity WebGL发布游戏生成WebGL

1.unty Hub中安装WEBGL支持 2.项目平台的切换 color space需要根据项目选择 ColorSpace,是指玩家设置的颜色空间。 伽马颜色空间是历史悠久的标准格式,但线性颜色空间渲染可提供更精确的结果。 具体区别:ColorSpace 3.由于没有自己服务器…

reactnative 调用原生ui组件

reactnative 调用原生ui组件 ![组件对应关系](https://img-blog.csdnimg.cn/direct/c4351ad7bd38411e9c13087f1059a4b0.png)1.该样例已textView,介绍。 新建MyTextViewManager 文件,继承SimpleViewManager。import android.graphics.Color; import andr…

《PCI Express体系结构导读》随记 —— 第II篇 第4章 PCIe总线概述(5)

接前一篇文章:《PCI Express体系结构导读》随记 —— 第II篇 第4章 PCIe总线概述(4) 4.1.2 PCIe总线使用的信号 PCIe设备使用两种电源信号供电,分别是Vcc与Vaux,其额定电压为3.3V。其中Vcc为主电源,PCIe设备…

关闭idea之后,项目还在运行,端口被占用

今天在写项目的时候,中途安装了一个插件,而且插件显示需要重启idea,重启的时候项目正在运行,重启之后发现idea没有显示有项目正在运行,当我要开启项目的时候,发现无法开启,显示端口被占用了&…

STM32学习笔记(六) —— 配置系统时钟

1.时钟树 从图中可以看出一共有四个时钟来源,分别是内部高速时钟、内部低速时钟、外部高速时钟接口、外部低速时钟接口,这些时钟源经过内部的倍频分频后提供给各外设使用。其中HSE与LSE需要由外部提供,可以是外部时钟直接输入,也可…

「效果图渲染」效果图与3D影视动画渲染平台

效果图渲染和3D影视动画渲染都是视觉图像渲染的领域应用。效果图渲染主要服务于建筑、室内设计和产品设计等行业,这些领域通常对视觉呈现的精度和细节有较高要求。与之相比,3D影视动画渲染则普遍应用于电影、电视、视频游戏和广告等媒体领域,…

力扣461. 汉明距离(位运算)

Problem: 461. 汉明距离 文章目录 题目描述思路复杂度Code 题目描述 思路 Problem: 力扣191. 位1的个数(位运算) 该题只需要在上题的基础上先对两个数进行一次异或操作即可 复杂度 时间复杂度: O ( 1 ) O(1) O(1) 空间复杂度: O ( 1 ) O(1) O(1) Code …

【linux】linux环境变量-详解-备查

【linux】linux环境变量-详解-备查 一、类型 **永久变量:**通过修改配置文件,配置之后变量永久生效。 用户变量(局部变量):修改的设置只对某个用户的路径或执行起作用; 在用户目录下的.bash_profile文件…

GPT-4这么厉害,能替代中之人吗?我们找虚拟偶像粉聊了聊

本文为 澎湃号湃客 至顶头条 联合出品 作者 | 张晓迪 编辑 | 王恒婷 就在人们还在讨论ChatGPT如何商业化时,GPT-4直接给出了答案。 3月17日凌晨,在GPT-4发布后的48小时,微软Office全家桶也带着GPT-4生成的Copilot来到办公室里给打工人“减负”了。 多模态大型语言模型…

【教程】谈一谈 IPA 上传到 App Store Connect 的几种方法

引言 在应用开发过程中,将应用程序上传到 App Store Connect 是一个关键的环节。本文将探讨几种常见的 IPA 文件上传方法,包括 Xcode、Application Loader、altool、Appuploader以及Transporter。通过本文的介绍和指导,读者将能够了解不同的…

看完这篇文章,你一定能看懂Datasheet!

大家好,我是砖一。 针对以上学妹的疑问,我有几点建议,大家可以听一下~ 一,怎么样查找Datasheet(数据手册) 大多数人下意识就点开浏览器,把型号往里面一输,不建议这样。 对于刚入行…

文心一言APP推出新功能:数字分身,只需一张照片和三句话即可创建自己的电子替身

文心一言APP近日推出了一项炸裂的新功能:数字分身。这一创新技术让用户通过一张照片和三句语音录制,轻松创建属于自己的数字分身。这一功能降低了数字分身技术的门槛,让更多人能够体验到个性化的虚拟形象。华为手机市场直接搜“文心一言”就可…

uniapp中组件库Mask 遮罩层 的使用方法

目录 #平台差异说明 #基本使用 #嵌入内容 #遮罩样式 #API #Props #Events #Slot 创建一个遮罩层,用于强调特定的页面元素,并阻止用户对遮罩下层的内容进行操作,一般用于弹窗场景 #平台差异说明 AppH5微信小程序支付宝小程序百度小程…

【TikTok选品】一周创下两百万销售额!这款小小遮瑕膏,如何从美区美妆市场杀出重围?

新年新气象。2024年以来,美区销售额周榜常有黑马,看得出卖家都卯足了劲在新的一年打下更亮眼的业绩。超店有数观察了TikTok选品数据,监测到上周TikTok美区就有一个新品在竞争激烈的美妆市场中杀出重围,在一周内创下200万美金的超高…

智慧工地可视化综合管理云平台 PC+APP

目录 一、智慧工地可视化数据大屏功能一览 1.首页 2.视频监控 3.机械设备 4.环境监测 5.安全管理 6.质量管理 7.劳务分析 8.进度管理 9.报警统计 二、项目人员管理 1.信息管理 2.信息采集 3.证件管理 危大工程管理 一、智慧工地可视化数据大屏功能一览 包括&am…

第二期《计算机视觉处理设计开发工程师》的培训通知

近日我们刚刚结束了《计算机视觉处理设计开发工程师》证书第一期培训,培训效果良好,所有学员均通过工信部统一线上考试,坐等证书了。鉴于学员们的反应我们第二期课程如约而至。 证书出台背景:为进一步贯彻落实中共中央印发《关于深…

F - Fence Bowling ——二分答案

Olav正在独自度过一个晚上,在保龄球馆练习。令人恼火的是,他所在的球道的侧栏被卡在了活动位置,所以如果球出界,它会简单地反弹回来。 这对Olav来说似乎是不公平的,因此他决定任何一次投球如果在击中销钉之前没有在篱笆…