方法1 栈
先入后出 入栈保存 出栈重构链表
var reverseList = function(head) {
let stark = []
while(head){
stark.push(head)
head = head.next
}
if(!stark.length)return null
let temp = stark.pop()
let pre = new ListNode(null,temp)
while(stark.length){
let node = stark.pop()
temp.next = node
temp = temp.next
}
temp.next = null
return pre.next
};
方法2 挨个反转
定义一个额外节点保存上一个节点,然后将下一个节点改完上一个节点
var reverseList = function(head) {
let node = null
while(head){
let temp = head.next
// 将下一个节点设置为上一次保存的上一个节点
head.next = node
// 保存上一个节点
node = head
// 依次往下
head = temp
}
return node
};
3 遍历
理解为二叉树的后续遍历
var reverseList = function(head) {
let pre = new ListNode()
let res = new ListNode(null,pre)
let handel = function(node){
if(!node)return null
handel(node.next)
pre.next = node
pre = pre.next
pre.next = null
}
handel(head)
return res.next.next
};