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经典快慢双指针)的主要内容,如果未能解决你的问题,请参考以下文章