LeetCode第141题:判断链表中是否有环

题干

给定一个链表,判断链表中是否有环。

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

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

实例:

img

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

解法:双指针

链表中有环说明我们链表的某一个节点时会进入一个循环,这个节点时不确定的,但是我们可以定义两个指针,一前一后,快指针指向后两位节点,如果有环,那么快指针一般会在第二轮追上第一轮的满指针,总之他们一定会在一定的时间内重合;如果没有环,则指向尾节点,直到结束退出,返回false

代码:

执行用时:84 ms, 在所有 JavaScript 提交中击败了95.11%的用户

内存消耗:39.9 MB, 在所有 JavaScript 提交中击败了97.09%的用户

var hasCycle = function (head) {
    // 首先判断链表是否有值或者只有一个值时返回false
    if (head == null || head.next == null) return false
    let index1 = head;
    let index2 = head.next;
    // 第三个判断是为了防止,我们只有俩个元素,而且没有环时,那么在next就会报错
    while (index1 != null && index2 != null&&index2.next!=null) {
        index1 = index1.next
        index2 = index2.next.next
        if (index2 == index1) {
            return true
        }
    }
    return false
};
复制代码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享