首页 > 编程语言 >判环算法01

判环算法01

时间:2023-07-18 21:59:44浏览次数:31  
标签:p2 判环 head 01 ListNode next 算法 p1 乌龟

判环算法01

检验链表是否有环

    //判断环
   public boolean hasCycle(ListNode head){
       ListNode p1=head;//乌龟
       ListNode p2=head;//兔子

           while (p2!=null&&p2.next!=null){
               p1=p1.next;
               p2=p2.next.next;
               if(p1==p2){
                   return true;
               }
           }
       return false;
   }

uTools_1689672254070

思路:利用了快慢指针的原理,快的只要与慢的相遇,就代表终究是一个圆环

判断环的位置02

  public ListNode hasCycle(ListNode head){
       ListNode p1=head;//乌龟
       ListNode p2=head;//兔子

           while (p2!=null&&p2.next!=null){
               p1=p1.next;
               p2=p2.next.next;
               if(p1==p2){//第一次遇见
                  p1=head;//乌龟返回初始值
                   while (true) {
                       if (p1==p2) {//再次相遇
                           return p1;
                       }
                       p1=p1.next;
                       p2=p2.next;
                   }

               }
           }
       return null;
   }

uTools_1689672896622

原理:总结规律

从起点开始走,走a+绕环n圈,都能找到环的入口位置

兔子走的:a的直线路程+绕环n圈+K

乌龟走的:a的直线路程+绕环n圈+K

兔子走的距离是乌龟的两倍

兔子走的减去乌龟走的 n

乌龟走的:兔子走的-乌龟走的=绕环圈数

标签:p2,判环,head,01,ListNode,next,算法,p1,乌龟
From: https://www.cnblogs.com/cgy-chen/p/17564219.html

相关文章

  • RAW算法处理之BLC(Black level Correction黑电平校正)
    BL产生的原因暗电流暗电流(darkcurrent),也称无照电流,指在没有光照射的状态下,在太阳电池、光敏二极管、光导电元件、光电管等的受光元件中流动的电流,一般由于载流子的扩散或者器件内部缺陷造成。目前常用的CMOS就是光电器件,所以也会有暗电流,导致光照为0的时候也有电压输出。如......
  • P6227 [BalticOI 2019 Day1] 山谷
    P6227[BalticOI2019Day1]山谷Description给一棵树,一个根,一些特殊补给点,一些询问。求解如下问题:断掉一条边\(u\tov\),这样以后你能否从给定的\(R_i\)走到根,若能输出escaped。不能到达根且不能到达任何一个特殊补给点输出oo。若不能到达根但可以到达特殊补给点输出边权和......
  • 「JOISC 2019 Day4」蛋糕拼接 3 题解
    先考虑这个式子:\(\sum_{j=1}^{M}|C_{k_{j}}-C_{k_{j+1}}|\)一定是在\(C\)有序时取到,具体证明很简单各位读者自己证明。那么现在式子变成:\(\sum{V}+2\times({C_{\max}-C_{\min}})\)这个时候一个常见的技巧是将\(C\)排序。这个时候就可以定义状态:\(dp_{i,j}=\s......
  • [CTSC2015] 日程管理
    [CTSC2015]日程管理题意幽香是幻想乡中一个非常有地位的人。她日理万机,事务繁多,反倒自己已经快管理不过来了。于是他决定开发一个日程管理软件来帮助自己管理任务。对于每个任务\(i\)有一个对应的截止日期\(t_i\)以及收益\(p_i\),表示若幽香能在不晚于第\(t_i\)天完成这个任务,......
  • LCA 离线tarjan算法
    tarjan算法是离线算法,它必须先将所有的要查询的点对存起来,然后在搜的时候输出结果。tarjan算法很经典,因为算法的思想很巧妙,利用了并查集思想,在dfs下,将查询一步一步的搜出来。伪代码如下:可以看到,对于我们已经保存好的查询,假设为(u,v),u为此时已经搜完的子树的根节点,v的位置就只有两种......
  • hdu 1010 Tempter of the Bone (dfs+奇偶剪枝)
    小记:最开始以为是T时间内,用bfsWA了,后来知道是刚好T时间,然后就用dfs,相当于暴力了,然后简单的dfs提交TLE,必须剪枝。首先判最少需要的时间是否有,没有就不用继续了,而如果有,那么因为我们是要花掉T时间刚好到达,那么我们先保证能走到终点的时间,然后在路上花掉多余的时间此时,我们必须保证......
  • 2014 蓝桥杯 预赛 c/c++ 本科B组 第八题:蚂蚁感冒(10')(4.9更新)
    第八题:蚂蚁感冒(10')  长100厘米的细长直杆子上有n只蚂蚁。它们的头有的朝左,有的朝右。   每只蚂蚁都只能沿着杆子向前爬,速度是1厘米/秒。  当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行。  这些蚂蚁中,有1只蚂蚁感冒了。并且在和其它蚂蚁碰面时,会把......
  • 2014 蓝桥杯 预赛 c/c++ 本科B组 第三题:李白打酒 (8' )
    第三题:李白打酒(8')  话说大诗人李白,一生好饮。幸好他从不开车。  一天,他提着酒壶,从家里出来,酒壶中有酒2斗。他边走边唱:  无事街上走,提壶去打酒。  逢店加一倍,遇花喝一斗。  这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了。......
  • 算法练习-day20
    二叉树669.修剪二叉搜索树题意:给你二叉搜索树的根节点root,同时给定最小边界low和最大边界high。通过修剪二叉搜索树,使得所有节点的值在[low,high]中。修剪树不应该 改变保留在树中的元素的相对结构(即如果没有被移除,原有的父代子代关系都应当保留)。可以证明,存在唯一的答案 ......
  • Multi Paxos 、Raft 、ZAB 算法
    参考:凤凰架构:https://icyfenix.cn/distribution/consensus/raft.html 一、将共识问题分解为三个问题1.选主《https://www.cnblogs.com/suBlog/p/17554677.html》BasicPaxos的活锁问题,两个提案节点互不相让地争相提出自己的提案,抢占同一个值的修改权限,导致整个系统在持续......