日常刷题0x29之未出新手村

206 阅读1分钟

如果不小心网友来到了这里请网友自动飘走,浪费你们时间表示歉意。该系列博客的目的是:想作为自律工具和朋友一起每天刷几道题作为打卡督促的功能,没有什么可参考学习的东西,也不是刷博客量充大佬的目的

题号:27
var removeElement = function (nums, val) {
    //fast去找和val不等的值,slow指向空位置
    let slow = 0, fast = 0
    while (fast < nums.length) {
        if (nums[fast] != val) {
            nums[slow] = nums[fast]
            slow++
            fast++
        } else {
            fast++
        }
    }
    return slow
};
题号:141
var hasCycle = function (head) {
    if (head == null) {
        return false
    }
    //快慢指针,count记录相遇的次数,刚开始处于同一起跑点count
    let slow = head, fast = head, count = 1
    while (fast && fast.next) {
        if (slow === fast && count != 1) {
            return true
        }
        fast = fast.next.next
        slow = slow.next
        count++
    }
    return false
};
题号:142
var detectCycle = function (head) {

    //同一起跑线开始
    let slow = head, fast = head, count = 0
    while (fast && fast.next) {
        if (fast === slow) {
            count++
            //相遇
            if (count == 1) {
                //起点相遇继续走
                fast = fast.next.next
                slow = slow.next
            } else {
                //非起点相遇,说明有环
                let result = head
                //开始找入环节点
                while (true) {
                    if (result === slow) {
                        return result
                    } else {
                        result = result.next
                        slow = slow.next
                    }
                }
            }
        } else {
            fast = fast.next.next
            slow = slow.next
        }
    }
    return null
};