Leetcode 92

我们可以想象第一个节点前还有一个 null 的节点,很多链表题都会这么做,这样我们可以用一个 prev 指向它,还有一个 curr 指向头节点。
反转就是要把 curr 节点的指向该为指向 prev,修改前我们需要记录一下下一个节点 next,否则我们再修改完指向后再也不知道原来的下一个节点是什么了。
每次迭代后,原本的 curr 成为下一轮的 prev,我们记录的 next 成为了下一轮的 current,如此进行循环知道达到链表末尾。
由于最后 curr 是指向 null 的,否则循环也不会停止,我们容易的知道 prev 就是我们要的答案。
/**
* 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
};