剑指offer之从尾到头打印链表

87 阅读1分钟

题目要求--输入链表头节点,从尾到头输出链表,用数组返回

原题链接点这里

方法一:辅助栈法

解题思路:这种先进后出(反转)类型题,一般可以通过栈来处理,利用栈先进后出这一特点来处理。

代码如下:

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