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
};