题目要求--输入链表头节点,从尾到头输出链表,用数组返回
方法一:辅助栈法
解题思路:这种先进后出(反转)类型题,一般可以通过栈来处理,利用栈先进后出这一特点来处理。
代码如下:
var reversePrint = function(head) {
let stack=[] //辅助栈
while(head){
stack.push(head)
head=head.next
}
ler res=[]
while(stack.length){
res.push(stack.pop())
}
return res
}
方法二:回溯法
解题思路:可以先递归到链表尾部,然后再一层一层回溯出来,在每次回溯时就将元素加入数组中.回溯的本质就是栈,先进后出
代码如下:
var reversePrint = function(head) {
let res=[]
function back(p){ //回溯函数
//------------------------1.边界条件
if(p==null){
return
}
//------------------------2.调用函数进行回溯
back(p.next)
//------------------------3.回溯的每一步都要进行的CRUD
res.push(p.val)
}
back(head) //调用回溯函数
return res
解题总结:
回溯三部曲 边界条件-->调用函数进行回溯-->CRUD