美文网首页
【JS算法】 环形链表双指针

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

作者: wyc0859 | 来源:发表于2022-04-27 12:32 被阅读0次

    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
    }
    

    相关文章

      网友评论

          本文标题:【JS算法】 环形链表双指针

          本文链接:https://www.haomeiwen.com/subject/eankyrtx.html