孙子们你们就继续卷吧------0x1

289 阅读1分钟

半年闭关经磨难,此次出关处处卷

不知大佬言什么,只觉此行似梦魇

本是人间一粒尘,相见何不是个缘

缘起缘落本是欢,你却自认是神仙

题号:876
//遍历拿到中点
//二次遍历找到中点
//一般不会让我们这么干
var middleNode = function (head) {
    if (head.next == null || head == null) {
        return head
    }
    let count = 0;
    let begin = head
    while (begin) {
        count++
        begin = begin.next
    }
    begin = head
    let mid = count % 2 == 0 ? count / 2 : (count - 1) / 2
    do {
        mid--
        begin = begin.next
    } while (mid > 0);

    return begin
};

//快慢指针
var middleNode = function (head) {

    let fast = head, slow = head
    while (fast.next && fast.next.next) {
        slow = slow.next
        fast = fast.next.next
    }
    if (fast.next) {
        //偶数
        return slow.next
    }
    //奇数
    return slow
};
题号:234

//利用递归本身的栈顺利
var isPalindrome = function (head) {

    let helper = (node) => {
        if (node == null) {
            return true
        }
        let result = helper(node.next)
        result = result && (node.val == head.val)
        head = head.next
        return result
    }
    return helper(head)
};

//找中点利用stack记录从首节点到中点的路径
//然后遍历对比
var isPalindrome = function (head) {

    if (head == null || head.next == null) {
        return true
    }
    let fast = head, slow = head, stack = []
    stack.push(slow)
    while (fast.next && fast.next.next) {
        slow = slow.next
        fast = fast.next.next
        stack.push(slow)
    }
    let next = null
    if (fast.next) {
        //偶数
        next = slow.next
    } else {
        //奇数
        next = slow
    }
    //开始比较
    while (stack.length != 0) {
        let ele = stack.pop()
        if (next.val != ele.val) {
            return false
        }
        next = next.next
    }
    return true
};
题号:剑指 Offer 24
//利用递归
var reverseList = function (head) {

    let dummy = null

    let helper = (node) => {
        if (node == null) {
            dummy = new ListNode()
            return dummy
        }

        let preNode = helper(node.next)
        preNode.next = node
        node.next = null
        return node
    }
    helper(head)
    return dummy.next
};