LeetCode-环形链表(java实现)

题目如下

​​​​本篇文章讨论的都是单链表

在这里插入图片描述
环形链表就是循环链表的意思。即链表的尾节点不是null,而是重新指向链表的其他节点。
一个循环链表
判断一个单链表是否是循环链表,可以采用快慢指针,追击相遇的方式来实现。算法的原理可以形象的比喻成“龟兔赛跑”。兔子的速度是乌龟的两倍,它们在一个环形的跑道上面赛跑。经过一段时间之后,兔子必定会超过乌龟一圈,然后相遇。我们循环一个单链表,如果这个单链表是循环链表,快指针和慢指针必然会在某个节点相遇。

具体的数学证明,请参看这篇博文: https://blog.csdn.net/mucaoyx/article/details/81395782

以下是运行过程图以及实现代码。
在这里插入图片描述

/**
 * Definition for singly-linked list.
 * class Node {
 *     int val;
 *     Node next;
 *     Node(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
    public boolean checkCircle(Node list){
        if(list == null){
            return false;
        }
        Node fast = list.next;
        Node slow = list;
        while (fast != null && fast.next != null){
            fast = fast.next.next;
            slow = slow.next;
            if(slow == fast){
                return true;
            }
        }
        return false;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值