问题描述:
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
限制:
0 <= 链表长度 <= 10000
例子
示例 1:
输入:head = [1,3,2]
输出:[2,3,1]
提示:
无
代码实现:
解题思路:
考虑到数组的方式更快,并且限制长度也不是很长,所以一开始想到辅助数组的方式,利用一个辅助数组先将数加入到数组,通过计数得到长度,再从辅助数组末尾依次把数加到返回 数组中,缺点是辅助数组的长度必须为10001;
或者利用辅助栈先进后出的特点,先将数压入栈中,最后出栈放入返回数组。
1.辅助数组:
public static int[] reversePrint(ListNode head) {
if (head==null) return new int[0];
int [] aid = new int[10001];
int i=0;
while (head != null){
aid[++i]= head.val;
head=head.next;
}
int []res=new int[i];
for (int j=0;i>0;j++){
res[j]=aid[i--];
}
return res;
}
2.辅助栈:
public static int[] reversePrint2(ListNode head) {
if (head==null) return new int[0];
Stack<Integer>stack=new Stack<Integer>();
while (head != null){
stack.push(head.val);
head=head.next;
}
int []res=new int[stack.size()];
int i=0;
while (!stack.isEmpty()){
res[i++]=stack.pop();
}
return res;
}
运行结果:
发现数组方式确实要比栈快一点
题目来源:力扣(LeetCode)
链接: LeetCode题目