如何反转一个单链表?给出迭代和递归两种写法。

迭代:三指针(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)
}

同分类其他题目