输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
输入:head = [1,3,2]
输出:[2,3,1]
- 说实话,这个题目还是比较简单的,但是我个人感觉其实还是有点小技巧在里面,看到官方题解以及许多大佬们的解法都是使用了栈或者递归。
class Solution {
public int[] reversePrint(ListNode head) {
Stack<Integer> stack = new Stack();
int len = 0;
while(head != null){
stack.push(head.val);
len++;
head = head.next;
}
int[] arr = new int[len];
for(int i=0;i<len;i++){
arr[i] = stack.pop();
}
return arr;
}
}
- 但是这里我的解法是,先遍历整个链表,获取到链表的长度,然后再创建数组,从数组的最后一位开始赋值;
class Solution {
public int[] reversePrint(ListNode head) {
ListNode node = head;
int len = 0;
while(node != null){
len++;
node = node.next;
}
int[] arr = new int[len];
for(int i=len-1;i>=0;i--){
arr[i] = head.val;
head = head.next;
}
return arr;
}
}