考虑到头部也可能产生反转,所以需要一个虚拟头。
在遍历的过程中记录反转后的尾节点和之前的节点。
最后进行节点的链接处理。
var reverseBetween = function(head, m, n) {
let noob = new ListNode(0)
noob.next = head
let cur = noob
let index = 0 let A,B
while (index < m) {
A = cur // A 记录反转子链的前一个节点 cur = cur.next
index++
}
B = cur // B 记录反转之后的尾节点 let pre = cur
while (index <= n) {
let next = cur.next cur.next = pre
pre = cur
cur = next
index++ }
// 执行完后cur 指针在反转子链的下一个节点 B.next = cur
A.next = pre
return noob.next };