function ListNode(val, next) {
this.val = (val === undefined ? 0 : val)
this.next = (next === undefined ? null : next)
}
var reverseKGroup = function (head, k) {
let arr = []
let dummyHead = new ListNode()
dummyHead.next = head
let cur = dummyHead
let pre = dummyHead
while (cur.next) {
arr.push(cur.next)
if (arr.length === k) {
let tailNext = arr[arr.length - 1].next
for (let j = arr.length - 1; j >= 1; j--) {
arr[j].next = arr[j - 1]
}
arr[0].next = tailNext
pre.next = arr[arr.length - 1]
pre = arr[0]
cur = arr[0]
arr = []
} else {
cur = cur.next
}
}
return dummyHead.next
};
var reverseKGroup = function (head, k) {
let dummyHead = new ListNode()
dummyHead.next = head
let pre = dummyHead
while (head) {
let tail = pre
for (let i = 0; i < k; i++) {
tail = tail.next
if (tail === null) {
return dummyHead.next
}
}
const next = tail.next
let [newHead, newTail] = reverse(head, tail)
pre.next = newHead
newTail.next = next
pre = newTail
head = newTail.next
}
return dummyHead.next
}
function reverse(head, tail) {
let prev = tail.next
let cur = head
while (prev !== tail) {
let next = cur.next
cur.next = prev
prev = cur
cur = next
}
return [tail, head]
}
const head = new ListNode(1)
const n1 = new ListNode(2)
const n2 = new ListNode(3)
const n3 = new ListNode(4)
const n4 = new ListNode(5)
head.next = n1
n1.next = n2
n2.next = n3
n3.next = n4
print(head)
const newHead = reverseKGroup(head, 2)
function print(head) {
let res = []
let cur = head
while (cur) {
res.push(cur.val)
cur = cur.next
}
console.log(res)
}
print(newHead)