美文网首页
LeetCode 第141题:环形链表

LeetCode 第141题:环形链表

作者: 放开那个BUG | 来源:发表于2020-06-22 17:49 被阅读0次

1、前言

题目描述

2、思路

这里使用快慢指针的方法解题,慢指针每次移动一步,而快指针每次移动两步。如果列表中不存在环,最终快指针将会最先到达尾部,此时我们可以返回 false。

现在考虑一个环形链表,把慢指针和快指针想象成两个在环形赛道上跑步的运动员(分别称之为慢跑者与快跑者)。而快跑者最终一定会追上慢跑者。这是为什么呢?考虑下面这种情况(记作情况 A)- 假如快跑者只落后慢跑者一步,在下一次迭代中,它们就会分别跑了一步或两步并相遇。

3、代码

public class Solution {
    public boolean hasCycle(ListNode head) {
        ListNode fast = head;
        ListNode slow = head;
        // fast 总是走两步,所以当 fast 为空或者到了最后一个节点时,
        // slow != fast,说明后面都没戏了
        while (fast != null && fast.next != null){
            slow = slow.next;
            fast = fast.next.next;
            if(fast == slow){
                return true;
            }
        }

        return false;
    }
}

相关文章

网友评论

      本文标题:LeetCode 第141题:环形链表

      本文链接:https://www.haomeiwen.com/subject/veraxktx.html