解法: 头插法
思路: k一个组,进行遍历,只要剩余节点大于等于k,即刻继续反转
要点: 开始前记录前一个节点,每组反转完成之后,前一个节点更新
var reverseKGroup = function(head, k) {
let virDom = new ListNode(-1) // 虚拟头节点
virDom.next = head
let prev = virDom
let cur = virDom.next
let len = 0
let eachKey = head
while (eachKey) { // 获取总长度
eachKey = eachKey.next
len++
}
while((len = (len - k)) > -1) {
for (let i = 0; i < k - 1; i++) { // 一个for循环为一组,一组循环结束后,在更新prev
let next = cur.next
cur.next = next.next
next.next = prev.next
prev.next = next
}
cur = cur.next // 上面的循环减了1,循环后cur+1,保持节点同步
for (let i = 0; i < k; i++) { // 更新prev节点
prev = prev.next
}
}
return virDom.next
};