从尾到头打印链表
题目
输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
思路
1.栈的使用
看到题的第一想法就是使用栈然后逆转
import java.util.ArrayList;
import java.util.Stack;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
Stack<Integer> resver = new Stack<Integer>();
while (listNode != null){
resver.push(listNode.val);
listNode = listNode.next;
}
ArrayList<Integer> result = new ArrayList<Integer>();
while (resver.size() > 0) {
result.add(resver.pop());
}
return result;
}
}
2.递归
不需要额外的数据结构。
static ArrayList<Integer> result = new ArrayList<>();
/**
* 递归做法,简单粗暴
* 为了避免每次都要创建ArrayList,所以声明为成员变量
* @param listNode
* @return
*/
public static ArrayList<Integer> printListFromTailToHead2(ListNode listNode) {
if(listNode != null) {
printListFromTailToHead2(listNode.next);
result.add(listNode.val);
}
return result;
}