一. 题目
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回).
示例 1:
输入: head = [1,3,2]
输出: [2,3,1]
二: 思路
其实题目的要求很简单,逆序将元素放入到数组中就可以了
思路1: 逆序其实就是栈,栈的特点就是先进后出,所以将链表依次入栈,然后再依次弹出放入数组就行了
思路2: 顺序遍历链表,依次逆序放入到数组中,也就是从左到右读取链表,放入数组是从右边往左边放
三: 代码实现
1. 先入栈再入数组
public class Solution {
public int[] reversePrint(ListNode head) {
Stack<Integer> stack = new Stack<>();
while (head != null) {
stack.push(head.val);
head = head.next;
}
// size一定要拿出来,不可以写在for循环里,因为入栈出栈,栈的长度是变化的
int size = stack.size();
int[] array = new int[size];
for (int i = 0; i < size; i++) {
array[i] = stack.pop();
}
return array;
}
}
2. 逆序直接放入数组
public class Solution {
public int[] reversePrint(ListNode head) {
ArrayList<Integer> list = new ArrayList<>();
while (head != null) {
list.add(head.val);
head = head.next;
}
int size = list.size();
int[] array = new int[size];
for (int i = 0; i < size; i++) {
array[i] = list.get(size - i -1);
}
return array;
}
}