LeetCode:141. 环形链表 | JavaScript解题

简介: LeetCode:141. 环形链表 | JavaScript解题

141. 环形链表

难度简单1618

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

如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。

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

 

示例 1:

微信截图_20221112164644.png


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


示例 2:

微信截图_20221112164652.png

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


示例 3:

微信截图_20221112164702.png

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

 

提示:

  • 链表中节点的数目范围是 [0, 104]
  • -105 <= Node.val <= 105
  • pos-1 或者链表中的一个 有效索引

 

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


思路

方法1 插旗法

经过一个节点就做一个记号,当有环,肯定会再次经过。

/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */
/**
 * @param {ListNode} head
 * @return {boolean}
 */
var hasCycle = function(head) {
    while(head) {
        if(head.flag) {
            return true;
        }else {
            head.flag = true;
            head = head.next;
        }
    }
    return false;
};
复制代码


方法2 快慢指针

有环,快指针肯定会超慢指针一圈然后相遇。

/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */
/**
 * @param {ListNode} head
 * @return {boolean}
 */
var hasCycle = function(head) {
    if(head == null || head.next == null) return false;
    // 快慢指针不能初始化为一样,不然条件判断他们一样时就出错了
    let slow = head.next; 
    let fast = head.next.next;
    while(slow && fast && fast.next) {
        fast = fast.next.next;
        slow = slow.next;
        if(slow == fast) return true;
    }
    return false;
};



目录
相关文章
|
3月前
|
Java
环形数组链表(java)
环形数组链表(java)
|
3月前
|
存储 SQL 算法
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
|
2月前
【数据结构OJ题】环形链表
力扣题目——环形链表
30 3
【数据结构OJ题】环形链表
|
2月前
【数据结构OJ题】环形链表II
力扣题目——环形链表II
20 1
【数据结构OJ题】环形链表II
|
3月前
|
存储 SQL 算法
LeetCode 题目 86:分隔链表
LeetCode 题目 86:分隔链表
|
2月前
|
Java 索引
力扣经典150题第五十六题:环形链表
力扣经典150题第五十六题:环形链表
24 0
|
3月前
|
存储 算法 Java
【经典算法】Leetcode 141. 环形链表(Java/C/Python3实现含注释说明,Easy)
【经典算法】Leetcode 141. 环形链表(Java/C/Python3实现含注释说明,Easy)
27 2
|
3月前
|
Java
单向环形链表-约瑟夫问题(java)
单向环形链表-约瑟夫问题(java)
|
3月前
|
存储 算法 C语言
【数据结构与算法 刷题系列】环形链表的约瑟夫问题
【数据结构与算法 刷题系列】环形链表的约瑟夫问题
|
4月前
<数据结构>五道LeetCode链表题分析.环形链表,反转链表,合并链表,找中间节点.
<数据结构>五道LeetCode链表题分析.环形链表,反转链表,合并链表,找中间节点
43 1