【JS算法】 环形链表双指针

2022-04-27  本文已影响0人  wyc0859

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

image.png

通俗易懂的算法

var hasCycle = function(head) {
    let cache  = new Set()   //一个集合
    while(head){
        if(cache.has(head)){
            return true  //存在环,true退出while循环
        }else{
            cache.add(head)
        }
        head = head.next
    }
    return false //不存在环
}

双指针算法

如果是环形链表,那让2个指针去跑,由于是无限循环,运算又有快慢,那2个指针一定有相遇的时候。没有相遇则不是环形链表

var hasCycle = function(head) {
    let slow = head  //取名慢指针
    let fast = head  //取名快指针
    while(fast && fast.next){
        fast = fast.next.next
        slow = slow.next
        if(slow===fast) return true
    }
    return false
}
上一篇 下一篇

猜你喜欢

热点阅读