题目描述
大致思路:
定义一个指向当前的指针cur以及指向前一位的指针prev, 遍历链表, 进行交换.
交换代码如下:
- 利用临时变量
tmp记录当前指针的下一个位置
let cur: ListNode | null = head;
let prev: ListNode | null = null;
while(cur !== null){
const tmp: ListNode | null = cur.next;
//将当前指针指向上一个
cur.next = prev;
//上一个指针后移
prev = cur;
//当前指针后移
cur = tmp;
}
//最后返回上一个指针, 此时指向原链表的最后一位, 也就是反转后的第一位
return prev;
- 利用 es6 数组解构进行交换
let cur: ListNode | null = head;
let prev: ListNode | null = null;
while(cur !== null){
[cur.next, prev, cur] = [prev, cur, cur.next];
}
return prev;
- 尾递归
export function reverseList(head: ListNode | null): ListNode | null {
const reverse = (prev: ListNode | null, cur: ListNode | null): ListNode | null => {
if (!cur) {
return prev;
}
const nextP = cur.next;
cur.next = prev;
return reverse(cur, nextP);
};
return reverse(null, head);
}