1.题目
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
示例 1:
输入:head = [1,3,2]
输出:[2,3,1]
限制:
0 <= 链表长度 <= 10000
2.分析
- 首先遍历一遍链表获取链表长度,不然不知道要返回的数组长度是多少,也没法创建。
- 第二次遍历链表取值,从数组后面一个个放入。
3.我的代码
class Solution {
public int[] reversePrint(ListNode head) {
int size = 0;
ListNode node = head;
while(node != null) {
size++;
node = node.next;
}
int[] res = new int[size];
int position = res.length - 1;
node = head;
while(node != null) {
res[position] = node.val;
position--;
node = node.next;
}
return res;
}
}
4.题解代码
class Solution {
ArrayList<Integer> tmp = new ArrayList<Integer>();
public int[] reversePrint(ListNode head) {
recur(head);
int[] res = new int[tmp.size()];
for(int i = 0; i < res.length; i++)
res[i] = tmp.get(i);
return res;
}
void recur(ListNode head) {
if(head == null) return;
recur(head.next);
tmp.add(head.val);
}
}