题目 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
方法一 遍历后反向输出数组
var reversePrint = function(head) {
if( head ==null)
return [];
else{
var output = [];
while( 1 ){
output.push( head.val);
if(head.next ==null)
break;
else
head=head.next;
}
return output.reverse();
}
};
这是最开始的时候写的,没有加预判,而且在判断是否遍历到链表最后一个时候到停止条件写的比较繁琐
var reversePrint = function(head) {
if( !head )
return [];
else{
var output = [];
while( head ){
output.push( head.val);
head=head.next;
}
return output.reverse();
}
};
参考了别人的答案以后进行了改进,结合题目中给的定义“head.next=null”,可知空指针的取值即为null,所以判断时可用 !head或head进行判断。
方法二 遍历+栈
var reversePrint = function(head) {
if( !head )
return [];
else{
var output = [];
while( head ){
output.unshift( head.val);
head=head.next;
}
return output;
}
};
每次将值插入头部即可
方法三 遍历
var reversePrint = function(head) {
if(!head)
return [];
var p = head;
var out = reversePrint(head.next);
out.push(p.val);
return out;
};
先对head的子链表进行递归,再将head.val push进数组内,递归过程不断从后向前push数值
也可以将out定义为全局变量,就不需要每次递归都建立新变量了,不过leetcode好像不支持外面放全局变量