day14 leetcode-hot100-25(链表4)

141. 环形链表 - 力扣(LeetCode)

1.哈希集合

思路

将节点一个一个加入HashSet,并用contains判断是否存在之前有存储过的节点,如果有便是环,如果没有便不是环。

具体代码
java 复制代码
/**
 * 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) {
        HashSet<ListNode> set = new HashSet<>();
        ListNode p = head;
        while(p!=null){
            if(set.contains(p)){
                return true;
            }
            set.add(p);
            p=p.next;
        }
        return false;
        
    }
}

2.快慢指针

优化空间复杂度为O(1)

思路

一个慢指针每次走1格,一个快指针每次走2格,如果存在环肯定会相遇,如果不存在,最后都为null.

具体代码
java 复制代码
/**
 * 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) {
        if(head == null){
            return false;
        }
        ListNode slow = head;
        ListNode fast = head.next;
        while(slow != null && fast != null){
            if(slow==fast){
                return true;
            }
            
            slow=slow.next;
            if(fast.next!=null){
                fast = fast.next.next;
            }
            else{
                return false;
            }
            
        }
        return false;
    }
}
相关推荐
地平线开发者几秒前
征程 6E/M 计算平台部署指南
算法·自动驾驶
程序猿小白日记16 分钟前
走向智能化:从编程语言看人工智能的未来
leetcode
mit6.82426 分钟前
数位dp|组合数学|差分emplace
算法
2301_7644413330 分钟前
新能源汽车电磁辐射高级预测
python·算法·数学建模·汽车
Keep_Trying_Go37 分钟前
论文Leveraging Unlabeled Data for Crowd Counting by Learning to Rank算法详解
人工智能·pytorch·深度学习·算法·人群计数
仟濹1 小时前
【C/C++】经典高精度算法 5道题 加减乘除「复习」
c语言·c++·算法
顾安r1 小时前
11.21 脚本 网页优化
linux·前端·javascript·算法·html
WolfGang0073212 小时前
代码随想录算法训练营Day27 | 56.合并区间、738.单调递增的数字、968.监控二叉树
算法
hweiyu002 小时前
数据结构:链表
数据结构·链表
信奥卷王2 小时前
2025年9月GESPC++三级真题解析(含视频)
开发语言·c++·算法