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第二次重合时就是在环口

    检测链表是否相交

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

  • 相关阅读:
    SQL Server 存储过程
    Ajax从服务器端获取数据
    Ajax中Get请求与Post请求的区别
    get请求
    Post请求
    递归案例
    SQL SERVER 和ACCESS的数据导入导出
    OA
    OBS桌面视频直播软件/推流工具使用指南
    基于EasyIPCamera实现的数字网络摄像机IPCamera的模拟器IPC RTSP Simulator
  • 原文地址:https://www.cnblogs.com/zemliu/p/2640849.html
Copyright © 2011-2022 走看看