LeetCode141.环形链表(Java实现)

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

设想一个环形跑道,两个人都向同一个方向跑,一个跑得慢,一个跑得快

跑上一段时间,跑得快的肯定会追上跑得慢的

快慢指针问题,可自行百度

LeetCode141.环形链表(Java实现)_第1张图片

思路:

1.链表判空

2.设置两个指针slow和fast,均从head开始

3.只要fast本身不是空,或者fast下一跳不为空,则slow向后移动一位,fast向后移动两位

4.移动过程中,如果出现slow和fast指向同一节点,则判别有环

5.如果循环正常结束,则代表slow和fast没有相遇,则无环

public class Solution {
    public boolean hasCycle(ListNode head) {
        //1.
        if (head == null || head.next == null)
            return false;
        //2.
        ListNode fast = head;
        ListNode slow = head;
        //3.
        while (fast != null && fast.next != null) {
            slow = slow.next;
            fast = fast.next.next;
            //4.
            if (slow == fast)
                return true;
        }
        //5.
        return false;
    }
}

 

你可能感兴趣的:(LeetCode编程题,LeetCode,Java,校招,编程竞赛,笔试面试)