LeetCode 数据结构与算法之环形链表

简介: LeetCode 数据结构与算法之环形链表

题目


141. 环形链表


给你一个链表的头节点 head ,判断链表中是否有环。


如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。


注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。


如果链表中存在环 ,则返回 true 。 否则,返回 false


示例 1:


image.png


输入:head = [3,2,0,-4], pos = 1
输出:true
解释:链表中有一个环,其尾部连接到第二个节点。


示例 2:


image.png


输入:head = [1,2], pos = 0
输出:true
解释:链表中有一个环,其尾部连接到第一个节点。


示例 3:


image.png


输入:head = [1], pos = -1
输出:false
解释:链表中没有环。


提示:


  • 链表中节点的数目范围是 [0, 104]


  • -105 <= Node.val <= 105


  • pos-1 或者链表中的一个 有效索引 。


进阶:你能用 O(1)(即,常量)内存解决此问题吗?


题解


解题分析


解题思路


最容易想到的方法是遍历所有节点,每次遍历到一个节点时,判断该节点此前是否被访问过。


具体地,我们可以使用哈希表来存储所有已经访问过的节点。每次我们到达一个节点,如果该节点已经存在于哈希表中,则说明该链表是环形链表,否则就将该节点加入哈希表中。重复这一过程,直到我们遍历完整个链表即可。


复杂度


时间复杂度 O(N)


空间复杂度 O(N)


解题代码


题解代码如下(代码中有详细的注释说明):


/**
 * 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) {
        Set<ListNode> seen = new HashSet<>();
        while(head != null) {
            if (!seen.add(head)) {
               return true;
            }
            head = head.next;
        }
        return false;
    }
}


提交后反馈结果(由于该题目没有进行优化,性能一般):


image.png


参考信息



相关文章
|
9天前
|
存储 算法 搜索推荐
力扣每日一题 6/13 反悔贪心算法
力扣每日一题 6/13 反悔贪心算法
8 1
|
6天前
|
Java 索引
力扣经典150题第五十六题:环形链表
力扣经典150题第五十六题:环形链表
6 0
|
11天前
|
算法 Java
Java数据结构与算法:双向链表
Java数据结构与算法:双向链表
|
11天前
|
算法 Java
Java数据结构与算法:循环链表
Java数据结构与算法:循环链表
|
12天前
|
算法
【数据结构与算法 刷题系列】求带环链表的入环节点(图文详解)
【数据结构与算法 刷题系列】求带环链表的入环节点(图文详解)
|
12天前
|
算法
【数据结构与算法 刷题系列】判断链表是否有环(图文详解)
【数据结构与算法 刷题系列】判断链表是否有环(图文详解)
|
12天前
|
算法
【数据结构与算法 经典例题】随机链表的复制(图文详解)
【数据结构与算法 经典例题】随机链表的复制(图文详解)
|
12天前
|
算法 C语言
【数据结构与算法 经典例题】链表的回文结构(图文详解)
【数据结构与算法 经典例题】链表的回文结构(图文详解)
|
12天前
|
算法
【数据结构与算法 经典例题】反转链表(图文详解)
【数据结构与算法 经典例题】反转链表(图文详解)
|
22天前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-2
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题