题目
@Author Tiam
@Date 2021/12/22 15:37
@Description: 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)
Definition for singly-linked list.
public class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
码
/**
* 一. 递归遍历链表, 速度更快
*/
ArrayList<Integer> tmp = new ArrayList<>();
public int[] reversePrint1(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);
}
/**
* 二. 辅助栈法 , 更易理解 ,消耗内存较少
* @param head
* @return
*/
public int[] reversePrint2(ListNode head) {
//辅助栈 ,先进后出
LinkedList<Integer> stack = new LinkedList<>();
while(head != null) {
//将指定的元素追加到此列表的末尾.
stack.addLast(head.val);
head = head.next;
}
//创建一个栈大小的数组
int[] res = new int[stack.size()];
for(int i = 0; i < res.length; i++) {
//从此列表中删除并返回最后一个元素。
res[i] = stack.removeLast();
}
return res;
}