1.题目描述
反转一个单链表. 题目链接: 206.反转链表
示例
输入: 1 -> 2 -> 3 -> 4 -> 5 -> NULL
输出: 5 -> 4 -> 3 -> 2 -> 1 -> NULL
2.思路分析
首先需要三个变量,第一个 pre 指向 NULL ,然后 cur 指向输入链表的头节点, next 指向头结点的下一个节点;
第一步:将 cur 的下一个节点指向 pre, 再将 pre 指向 cur ,效果就相当于把 cur 节点转移到 pre 链表上,然后将 cur 指向 next, next 指向 next 的下一个节点,然后当前的状态就相当于最开始的状态,且 pre 链表添加了新节点. 然后重复第一步,最后如果 cur 指向 NULL,说明输入链表已经循环完成.而 pre 就是我们要输出的链表.
效果图:
3.代码
var reverseList = function(head) {
if (!head) return null;
let pre = null, cur = head;
while(cur){
let next = cur.next;
cur.next = pre;
pre = cur;
cur = next;
}
return pre;
};
代码优化: 可使用解构赋值
var reverseList = function(head) {
if (!head) return null;
let pre = null, cur = head;
while(cur){
[cur.next, pre, cur] = [pre, cur, cur.next]
}
return pre;
};