### Reverse Nodes in k-Group

Given a linked list, reverse the nodes of a linked list k at a time and return its modified list.

k is a positive integer and is less than or equal to the length of the linked list. If the number of nodes is not a multiple of k then left-out nodes in the end should remain as it is.

Example:

For k = 2, you should return: 2->1->4->3->5

For k = 3, you should return: 3->2->1->4->5

Note:

Only constant extra memory is allowed. You may not alter the values in the list's nodes, only nodes itself may be changed.

### Analyze

① 将 tail 移到要翻转部分的最后一个元素, 若移动 k 元素之前已到达链表末尾则完成每间隔 k 个值的链表翻转;

② 接着依次把 cur 移到 tail 后面;

k === 3
prevtail   head1dummy    1     2     3     4     5
prev   head1        taildummy    1     2     3     4     5          cur
prev          tail head1dummy    2     3    1     4     5          cur
prev    tail       head1dummy    3     2    1     4     5            cur
/** * Definition for singly-linked list. * function ListNode(val) { *     this.val = val; *     this.next = null; * } *//** * @param {ListNode} head * @param {number} k * @return {ListNode} */var reverseKGroup = function(head, k) {  const dummyHead = new ListNode(0)  dummyHead.next = head  let prev = dummyHead  let tail = dummyHead
while (true) {    let count = 0    while (tail.next && count !== k) {      tail = tail.next      count++    }    if (count !== k) break
return dummyHead.next}