25. Reverse Nodes in k-Group

2021-02-20  本文已影响0人  jluemmmm

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

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

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

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
}
上一篇下一篇

猜你喜欢

热点阅读