题解 | #判断链表中是否有环#

判断链表中是否有环

https://www.nowcoder.com/practice/650474f313294468a4ded3ce0f7898b9

import java.util.*;
/**
 * Definition for singly-linked list.
 * class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    public boolean hasCycle(ListNode head) {
        ListNode fast = head;
        ListNode slow = head;
        if (head == null) {
            return false;
        }
        while (fast != null && fast.next != null) {
            fast = fast.next.next;
            slow = slow.next;
            if (fast == slow) {
                return true;
            }

        }
return false;


    }
}

核心思想:快慢指针,如果存在环,就会一直转圈,当跑得快领先一圈,那么跑的快的必然会追上跑得慢的。快指针更有可能走到链表的结尾,所以while用fast来判别。fast走两步, fast = fast.next.next; slow走一步 slow = slow.next;如果无环,那么fast走到结束或者结束前一个就可以知道是否有环。如果有环,就是会在环中转圈,转到fast领先slow一圈相遇,fast == slow时,就是证明存在环。

全部评论

相关推荐

迷茫的大四🐶:💐孝子启动失败,改为启动咏鹅
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务