Skip to content

Code:

js
import {
    ArrayToLink,
    LinkToArray,
    ListNode
} from '../common.js'

/**
 * Definition for singly-linked list.
 * function ListNode(val, next) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.next = (next===undefined ? null : next)
 * }
 */
/**
 * @param {ListNode} head
 * @param {number} k
 * @return {ListNode}
 */
var reverseKGroup = function (head, k) {
    const dummy = new ListNode(0, head)
    let prev = dummy

    while (head) {
        let fast = prev
        let low = head
        let len = k

        while(len--) {
            fast = fast.next

            if (!fast) {
                return dummy.next
            }
        }

        let pre = fast.next

        // 这里比较烧脑
        while(head && pre !== fast) {
            const next = head.next
            head.next = pre
            pre = head
            head = next
        }

        prev.next = pre
        prev = low
    }

    return dummy.next
};

console.log(LinkToArray(reverseKGroup(ArrayToLink([1, 2, 3, 4, 5, 6]), 3)))

❤ With Algorithm