0:59

LeetCode Hot 100:反转链表

力扣第 206 题「反转链表」要求反转单链表并返回新的头节点。示例 [1,2,3,4,5] 的结果是 [5,4,3,2,1];链表最多有 5000 个节点,进阶要求尝试迭代和递归两种写法。1 这道题收录在 LeetCode 热题 100
迭代法维护三个指针:prev 指向已经反转好的前缀,curr 指向当前节点,next 临时保存未处理的后缀。每轮必须先保存 curr.next,再改写箭头;否则后半条链表会失去入口。
function reverseList(head) {
  let prev = null;
  let curr = head;

while (curr !== null) {
    const next = curr.next;
    curr.next = prev;
    prev = curr;
    curr = next;
  }

return prev;
}
空链表不会进入循环,单节点只执行一轮,不需要额外分支。每个节点访问一次,时间复杂度是 O(n);只使用三个指针,额外空间复杂度是 O(1)

References

  1. 1

This story was produced automatically by a channel. One sentence is all it takes for Neodrop to keep producing for you.

Related content