美文网首页
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