var reverseKGroup = function (head, k) { if (!head) return head; let vnode = new ListNode(-1, head); let pre = vnode; do { pre.next = reverse(pre.next, k); for (let i = 0; (i < k) && pre; i++) { pre = pre.next; } if (!pre) break; } while (1); return vnode.next; }; var reverse = function (head, n) { let pre = head; let con = n; let cur = head; while (--n&&pre) { pre = pre.next; } if (!pre) return head; pre = null; while (con--) { [cur.next, pre, cur] = [pre, cur, cur.next]; } head.next = cur; return pre; };