【剑指offer】链表找环的入口

2023-05-16

给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。

 

解题思路:

在链表判环的基础上进行优化

追击问题,一快一慢可以再环中相遇 p1=p1.next; p2=p2.next.next

那么如何找到环的入口

针对一快一慢的节点,慢节点走的路成为s,则快的为2s,当两节点在环中环绕n圈

2s = s + nc

对于慢节点 s = a + x

两式子结合

a + x = nc

a = nc - x

a = (n-1)c + c-x

a = kc + (c-x)

我们可以看出 c-x为从相遇点继续走回到环入口的距离,所以可以看出如果一个节点从表头出发,一个节点从两点相遇点出发(一次一步),必回相遇。

# -*- coding:utf-8 -*-
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None
class Solution:
    def EntryNodeOfLoop(self, pHead):
        # write code here
        if pHead == None or pHead.next == None:
            return None
        
        p1 = pHead
        p2 = pHead
        
        while True:
            if p1 == None or p2 == None:
                return None
            p1 = p1.next
            p2 = p2.next.next
            if p1 == p2:
                break
        
        if p1 == p2:
            pp = pHead
            while pp != p1:
                pp = pp.next
                p1 = p1.next
            return pp
        else:
            return None
        

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【剑指offer】链表找环的入口 的相关文章

随机推荐

  • 【opencv 学习】使用tesseract-ocr机芯数字识别

    今天学习 tesseract ocr开源库的使用 xff0c 这是个开源的能够识别多语言文字的库 下面是在Windows上安装的步骤 1 xff1a 下载软件 xff0c 选择最新的版本安装 https github com UB Mann
  • 在idea中使用findbugs工具

    目录 一 首先需要在idea内部搜索findbugs工具 xff0c 进行安装 二 自己下载findbugs xff0c 安装到Idea中 xff0c 进行使用 三 find sec bugs安全规则组件的应用 xff0c 在二的步骤中提供
  • linux实现Tomcat的定时重启

    还是吃了能力的亏 xff0c 因为很少写shell脚本 xff0c 导致一个很简单的问题困扰 1 shell脚本 如果不会写的 xff0c 百度下来的脚本 xff0c 单独执行没有任何问题 xff0c 但是一旦通过定时任务去执行的话 xff
  • rt-thread tcp服务器 多客户端连接

    1 tcp 服务端测试 我们从rt thread 源码中的example 文件夹可以找到一个名为tcpserver c 的文件 我们按照官网说明 添加此文件拖进项目中去 即可实现tcpserver 测试功能 参考链接 stm32f429网络
  • C++后端开发——POSIX网络API解析

    网络中进程之间如何通信 xff1f 本地的进程间通信 xff08 IPC xff09 有很多种方式 xff0c 但可以总结为下面4类 xff1a 消息传递 xff08 管道 FIFO 消息队列 xff09 同步 xff08 互斥量 条件变量
  • win11右键菜单怎么修改 Windows11修改右键菜单为win10风格的步骤方法

    有很多朋友升级到win11系统之后不是特别喜欢右键菜单 xff0c 因为经常需要多点击一次显示更多选项 xff0c 很不舒服 大家就想知道如何修改回原来win10的右键菜单 xff0c 其实还是有方法的 xff0c 除了使用软件以外 xff
  • win11WiFi无法连接网络怎么办 Windows11WiFi无法连接网络的解决方法

    最近不是win11系统出来了吗 很多小伙伴在体验win11系统的过程种 经常会遇到各种各样的问题 比如win11wifi无法连接网络 那么win11wifi无法连接网络怎么办呢 下面小编就给大家带来win11wifi无法连接网络的解决方法
  • Win11更改声音输出设备的方法

    如果您的计算机连接了多个输出设备 xff0c 为了方便切换 xff0c 有什么简单便捷的方法吗 xff1f 下面小编就给大家带来4种不同的更换方法 xff0c 希望对您有所帮助 更多系统教程尽在小白系统重装官网 单击由 Wi Fi 图标 扬
  • Win11热点连接成功但没网?Win11移动热点和网络冲突的解决方法

    Win11热点连接成功但没网怎么办 xff1f 出现这样的情况多半是更新了系统补丁KB5014697后 xff0c 其具体表现为打开移动热点 xff0c 使移动设备连接到计算机开启的移动热点后 xff0c 计算机的浏览器无法打开网页 xff
  • Win11暂停更新点不了怎么办?Win11暂停更新是灰色的如何解决?

    Win11暂停更新点不了怎么办 xff1f Win11暂停更新是灰色的如何解决 xff1f 有很多朋友发现了这个情况 xff0c 原先自己设置了暂停更新 xff0c 但是等到突然某一天系统就会开始更新 xff0c 这时用户想要再点暂停更新就
  • Win11玩绝地求生(PUBG)崩溃怎么办?Win11玩绝地求生崩溃解决方法

    绝地求生 xff08 PUBG xff09 是一款非常有趣射击类游戏 xff0c 哪怕升级Win11系统也有很多小伙伴都在体验 xff0c 但有不少小伙伴在Win11系统更新完之后发现经常会出现崩溃或者闪退的情况 xff0c 很多小伙伴不清
  • 重装系统后没声音如何解决

    重装系统之后不少用户总是遇到各种各样的问题 xff0c 例如说电脑重装系统后没声音 xff0c 却不知道应该怎么解决 今天 xff0c 我们就来看看重装系统后没有声音怎么办的解决方法 工具 原料 xff1a 系统版本 xff1a windo
  • OpenStack之Region、Available Zone、Host Aggregates

    OpenStack之Region Available Zone Host Aggregates 亚马逊AWS是公共云计算的先驱 xff0c 一些云计算中重要的产品设计和基础概念可以说都是亚马逊引入的 这其中有两个非常重要的概念 xff1a
  • idea安装copilot

    目录 1 申请资格 2 安装插件 3 使用Copilot 现在已经要收费了 xff0c 申请资格变成购买了 10美金一个月 不过如果是学生的话可以进行学生认证 xff0c 使用学生认证来免费使用 非学生的话如果想要使用可以搞个github学
  • 【Leetcode】342. Power of Four(二进制计算)(判定是否为4的幂次方)

    Given an integer signed 32 bits write a function to check whether it is a power of 4 Example 1 Input 16 Output true Exam
  • signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0xc

    span class hljs number 02 span span class hljs subst span span class hljs number 02 span span class hljs number 00 span
  • 【剑指offer】数字在排序数组中出现的次数

    统计一个数字在排序数组中出现的次数 解题思路 xff1a 遍历查找不是本题的最优解 xff0c 既然给出的是有序数组 xff0c 所以我们只需要找到目标的左侧和右侧的索引即可 所以我们可以找到本数组当中key 43 0 5和key 0 5的
  • 【剑指offer】栈的压入、弹出序列(Python中List模拟栈队列操作)

    题目描述 输入两个整数序列 xff0c 第一个序列表示栈的压入顺序 xff0c 请判断第二个序列是否可能为该栈的弹出顺序 假设压入栈的所有数字均不相等 例如序列1 2 3 4 5是某栈的压入顺序 xff0c 序列4 5 3 2 1是该压栈序
  • 【Python】pandas合并多个CSV表,去重表头

    我们有三个子表 xff0c 每个表都有表头但是没有每行的索引 xff0c 每一个表在csv文件中结构如下 xff1a name age x 65 y 77 z 10 通过Pandas打开 data 61 pd read csv r 39 t
  • 【剑指offer】链表找环的入口

    给一个链表 xff0c 若其中包含环 xff0c 请找出该链表的环的入口结点 xff0c 否则 xff0c 输出null 解题思路 xff1a 在链表判环的基础上进行优化 追击问题 xff0c 一快一慢可以再环中相遇 p1 61 p1 ne