Leetcode141. 环形链表(JAVA经典快慢双指针)

Posted !0 !

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode141. 环形链表(JAVA经典快慢双指针)相关的知识,希望对你有一定的参考价值。

题目链接:https://leetcode-cn.com/problems/linked-list-cycle/

解题思路

这题可以使用哈希表做,但是有一个更加巧妙的方法–双指针算法。这题已经变成了经典的双指针算法题了。
我们先讲一下思路,我们可以让快指针每次走两步,慢指针每次走一步。如果没有环,那快慢指针永远都不会相遇;如果有环,那么快慢指针肯定会相遇。
思路讲出来很简单,但是如果让小白去想是很难短时间想到的,所以这就是我们为什么要去刷题,我们需要积累经验,使得我们做题的时候能想到很难想到的方法。

代码

public class Solution {
    public boolean hasCycle(ListNode head) {
        ListNode s = head;
        ListNode f = head;
        while(f != null && f.next != null) {
            f = f.next.next;
            s = s.next;
            if(s == f)
                return true;
        }
        return false;
    }
}

复杂度分析

  • 时间复杂度:O(n)
  • 空间复杂度:O(1)

以上是关于Leetcode141. 环形链表(JAVA经典快慢双指针)的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 141——环形链表

我用java刷 leetcode 141. 环形链表

leetcode 141.环形链表(双指针 java)

LeetCode Java刷题笔记—141. 环形链表

Leetcode 141题 环形链表(Linked List Cycle) Java语言求解

LeetCode-141. 环形链表(java)