迭代(容易理解)
var reverseList = function(head) {
if(!head || !head.next) return head // base case
let cur = head, pre = null, next = null // 定义三个指针:当前、过去、将来
while(cur){
next = cur.next // 先保存下一个
cur.next = pre // 当前节点下一个节点改为前一个节点
pre = cur // pre 指针指向当前节点
cur = next // 当前节点指向保存的下一个几点
}
return pre
};
递归(简洁优雅)
思路:
前两行代码递归一直往后,最终返回了last,指向最后一个节点。
然后从倒数第二个节点开始,当前节点的下一个节点的next指向了当前节点。
最后返回last即完成
var reverseList = function(head) {
if(!head || !head.next) return head
let last = reverseList(head.next)
head.next.next = head
head.next = null
return last
};