今天分享的题目来源于 LeetCode 上第 141 号问题:环形链表。题目难度为 Easy,目前通过率为 40.4% 。

使用快慢指针的方式去求解 so easy !

题目描述

给定一个链表,判断链表中是否有环。

为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。

示例 1:

输入:head = [3,2,0,-4], pos = 1
输出:true
解释:链表中有一个环,其尾部连接到第二个节点。

示例 2:

输入:head = [1,2], pos = 0
输出:true
解释:链表中有一个环,其尾部连接到第一个节点。

示例 3:

输入:head = [1], pos = -1
输出:false
解释:链表中没有环。

进阶:

你能用 O(1)(即,常量)内存解决此问题吗?

题目解析

这道题是快慢指针的经典应用

设置两个指针,一个每次走一步的慢指针和一个每次走两步的快指针

  • 如果不含有环,跑得快的那个指针最终会遇到 null,说明链表不含环

  • 如果含有环,快指针会超慢指针一圈,和慢指针相遇,说明链表含有环。

动画描述

代码实现

//author:程序员小吴
public class Solution {
    public boolean hasCycle(ListNode head) {
        ListNode slow = head, fast = head;
        while (fast != null && fast.next != null) {
            slow = slow.next;
            fast = fast.next.next;
            if (slow == fast) return true;
        }
        return false;
    }
}



©著作权归作者所有:来自51CTO博客作者mb5fe18fab305a5的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 解答、收录了 8 道 MyBatis 的题目
  2. 2021.1.17——指针和结构体的初步认识
  3. PHP如何区分继承链中的$ this指针?
  4. python题目——认识*与**,判断函数输出
  5. 堆栈/帧指针作为外部变量
  6. 自己实现的C++智能指针的功能代码和测试用例
  7. 嵌入式或LINUX相关研发面试题目
  8. 面试程序员SQL题目?哪位大哥大姐帮我看看 这怎么做? 谢谢
  9. Android中findViewById()h获取EditText 空指针问题

随机推荐

  1. 在Android中,px,dp,dip,sp的不同之处
  2. Android(安卓)GPS使用
  3. Android多分辨率适配框架(3)— 使用指南
  4. android 系统开发之开机动画
  5. android ndk log
  6. Android的selector,背景选择器
  7. Android多分辨率适配框架(2)— 原理剖析
  8. 性能优化之Java(Android)代码优化
  9. Android UI布局之RelativeLayout
  10. Android 第七课——UI布局