https://www.youtube.com/watch?v=1UOPsfP85V4
class Solution {
reverseKGroup(head, k) {
const dummy = new ListNode(0, head);
let groupPrev = dummy;
while (true) {
const kth = this.getKth(groupPrev, k);
if (!kth) break;
const groupNext = kth.next;
let prev = groupNext;
let curr = groupPrev.next;
while (curr !== groupNext) {
[curr.next, prev, curr] = [prev, curr, curr.next];
}
const tmp = groupPrev.next;
groupPrev.next = kth;
groupPrev = tmp;
}
return dummy.next;
}
getKth(curr, k) {
while (curr && k > 0) {
curr = curr.next;
k--;
}
return curr;
}
}