var reverseBetween = function (head, left, right) {
if (left >= right) {
return head
}
let cur = head
let count = 1
let leftNode
let rightNode
let prePartTail = null
let nextPartHead = null
while (cur) {
if (count === left - 1) {
prePartTail = cur
}
if (count === left) {
leftNode = cur
}
if (count === right) {
rightNode = cur
}
if (count === right + 1) {
nextPartHead = cur
}
cur = cur.next
count++
}
function reverse(head) {
let tail = null
let cur = head
let pre = tail
while (cur) {
let next = cur.next
cur.next = pre
pre = cur
cur = next
}
return pre
}
rightNode.next = null
let midPartHead = reverse(leftNode)
let midPartTail = midPartHead
while (midPartTail.next) {
midPartTail = midPartTail.next
}
let resHead
if (prePartTail) {
prePartTail.next = midPartHead
resHead = head
} else {
resHead = midPartHead
}
midPartTail.next = nextPartHead
return resHead
};