反转链表

Leetcode 92

发表于 2023-05-11 12:57:30
更新于 2024-04-18 13:33:37
算法

力扣 206: 反转链表

我们可以想象第一个节点前还有一个 null 的节点,很多链表题都会这么做,这样我们可以用一个 prev 指向它,还有一个 curr 指向头节点。

反转就是要把 curr 节点的指向该为指向 prev,修改前我们需要记录一下下一个节点 next,否则我们再修改完指向后再也不知道原来的下一个节点是什么了。

每次迭代后,原本的 curr 成为下一轮的 prev,我们记录的 next 成为了下一轮的 current,如此进行循环知道达到链表末尾。

由于最后 curr 是指向 null 的,否则循环也不会停止,我们容易的知道 prev 就是我们要的答案。

typescript
/**
 * Definition for singly-linked list.
 * class ListNode {
 *     val: number
 *     next: ListNode | null
 *     constructor(val?: number, next?: ListNode | null) {
 *         this.val = (val===undefined ? 0 : val)
 *         this.next = (next===undefined ? null : next)
 *     }
 * }
 */

function reverseList(head: ListNode | null): ListNode | null {
  let prev = null
  let curr = head

  while (curr) {
    let next = curr.next

    curr.next = prev

    prev = curr
    curr = next
  }

  return prev
};