如何反转一个单链表?给出迭代和递归两种写法。
迭代:三指针(prev / cur / next)逐个反转指向。
function reverseIter(head) {
let prev = null, cur = head
while (cur) {
const next = cur.next
cur.next = prev
prev = cur
cur = next
}
return prev
}递归:先反转后续,再让后一个节点指向自己。
function reverseRec(head, prev = null) {
if (!head) return prev
const next = head.next
head.next = prev
return reverseRec(next, head)
}- 时间
O(n),空间:迭代O(1),递归O(n)(调用栈) - 易错点:反转前先保存
next,否则链表断裂