如何判断链表有环以及求出环的长度和入口点

本文介绍了如何通过双指针法判断单向链表是否存在环,并在有环的情况下,详细阐述了如何求解环的长度以及找到环的入口点。解题思路包括让指针p1每次移动1个节点,指针p2每次移动2个节点,当两者相遇即表明存在环。接着,通过继续循环计算环的长度,最后确定入环点的方法是让p1从相遇点开始,p3从头结点开始,两者相遇之处即为环的入口点。
摘要由CSDN通过智能技术生成

题目:有一个单向链表,链表中有可能出现“环”,如下图所示:那么如何用程序来判断该链表是否为有环链表呢?
在这里插入图片描述
解题思路:

  • 首先创建两个对象引用p1和p2,让他们同时指向这个链表的头结点,然后开始遍历链表,让指针p1每次向后移动1个节点,指针p2每次向后移动2个节点,然后比较两个指针指向的节点是否相同,如果相同,则链表有环;否则继续遍历。
  • 这个解决思路的思想是,对于环形,速度快的总会在多跑一圈的情况下追上速度慢的。

主要代码实现:

	//链表节点
    private static class Node{
   
        int data;
        Node next;
        Node(int data){
   
            this.data=data;
        }
    }

    /**
     * 判断链表是否有环
     * @param head 链表头结点
     * @return 返回结果,tr
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值