function reverseList(head) {
if (head == null || head.next == null) return head
const node = head, tail = head.next
const _list = reverseList(tail)
node.next = tail.next
tail.next = node
return _list
}
翻转前 n 个链表(递归实现)
function reverseN(head, n) {
let node = head
for (let i = 0; i < n; i++) {
if (node == null) return head
node = node.next
}
if (n === 1) return head
const newTail = head.next, newHead = reverseN(head.next, n - 1)
head.next = newTail.next
newTail.next = head
return newHead
}
翻转区间链表
function reverseBetween(head, left, right) {
if (left === 1) return reverseN(head, right)
head.next = reverseBetween(head.next, left - 1, right - 1)
return head
}
function reverseN(head, n) {
if (n === 1) return head
const newTail = head.next, newHead = reverseN(head.next, n - 1)
head.next = newTail.next
newTail.next = head
return newHead
}
function reverseKGroup(head, k) {
const dummuHead = new ListNode(null, head)
let curr = dummuHead
do {
const newTail = curr.next
curr.next = reverseN(curr.next, k)
curr = newTail
} while (curr && curr.next)
return dummuHead.next
}
function reverseN(head, n) {
let node = head
for (let i = 0; i < n; i++) {
if (node == null) return head
node = node.next
}
if (n === 1) return head
const newTail = head.next, newHead = reverseN(head.next, n - 1)
head.next = newTail.next
newTail.next = head
return newHead
}