zoukankan      html  css  js  c++  java
  • 判断链表是否有环,找链表中间节点,判断两个链表是否相交

    判断是否有环和查找中间节点

    使用两个指针,p1每次前进1个节点,p2每次前进2个节点,如果链表有环,则最后两个指针指向的节点将会重合,若无环,则p2最后将走到链表尾,当p2走到链表尾时,p1指向的节点就是中间节点

    检测环的入口

    当p1p2重合以后,让p2回到表头,步长设为1重新开始走,当p1p2再次重合时,重合点即为环入口

    证明:

    如图表头到环入口长度为l1,环的长度为l2,环的入口为h点,p2p1第一次重合点为h'点,设hh'长度为l3,则有

    在第一次重合时

    p1走过的路程 = l1 + l3

    p2走过的路程 = l1 + l3 + n * l2 = 2 * (l1+l3) 

    => l2 = (l1 + l3) / n   # n为p2在环上走过的圈数

    p2速度置为1重新走起,当走过l1的路程时到达环入口

    p1此时也走过l1的路程, 则从环口开始,p1共走过的路程为 l1 + l3 + l1 - l1 = l1 + l3(减去了表头到环口路程) = n * l2 正好走了n圈到达环口

    故p1,p2第二次重合时就是在环口

    检测链表是否相交

    将其中一个链表首尾相连,检测另一个链表是否存在环,如果存在则相交,环的入口即为两个链表的交点

  • 相关阅读:
    tcl基本语法
    linux hostid与lmhostid
    linux下uptime命令
    介绍一下 WebApplicationContext?
    Spring 由哪些模块组成?
    怎样开启注解装配?
    解释不同方式的自动装配 ?
    @Qualifier 注解有什么用?
    解释 Spring 框架中 bean 的生命周期?
    如何在 spring 中启动注解装配?
  • 原文地址:https://www.cnblogs.com/zemliu/p/2640849.html
Copyright © 2011-2022 走看看