美文网首页
25. Reverse Nodes in k-Group

25. Reverse Nodes in k-Group

作者: jluemmmm | 来源:发表于2021-02-20 09:36 被阅读0次

    给定一个链表,每 k 个节点进行一组反转,返回翻转后的链表。k 是一个正整数,值小于或等于链表的长度。如果节点总数不是 k 的整数倍,将最后剩余的节点保持原有顺序。

    算法只能使用常数的额外空间,不能只单纯改变节点内部的值,需要实际进行节点交换。

    分别对每 k 个部分进行链表反转,保留tail 指针指向每k次反转的尾部

    • 时间复杂度 O(n),将每个节点精确处理了两次,一次是计算每个递归调用中的节点数,一次是反转子列表时,调用一次。
    • 空间复杂度O(1)
    • Runtime: 92 ms, faster than 90.78%
    • Memory Usage: 41.7 MB, less than 85.01%
    var reverseKGroup = function(head, k) {
        let prev = null
        let tail = null
        let cur = head
        
        while(cur !== null) {
            let n = 0
            
            while(cur !== null && n < k) {
                cur = cur.next
                n++
            }
            
            if(n === k) {
                let t = reverseLinkedList(head, k)
                if(prev === null) prev = t
                if(tail !== null) tail.next = t
                
                tail = head
                head = cur
            }
    
        }
        if(tail !== null) tail.next = head
        return prev === null ? cur : prev
    };
    
    var reverseLinkedList = function(head, k) {
        let prev = null
        let cur = head
        while(cur !== null && k > 0) {
            let temp = cur.next
            cur.next = prev
            prev = cur
            cur = temp
            k--
        }
        return prev
    }
    

    相关文章

      网友评论

          本文标题:25. Reverse Nodes in k-Group

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