美文网首页
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