//输入一个链表,按链表从尾到头的顺序返回一个ArrayList。 /** * public class ListNode { * int val; * ListNode next = null; * * ListNode(int val) { * this.val = val; * } * } * */ //法1:递归 O(n) import java.util.ArrayList; public class Solution { ArrayList<Integer>arrayList=new ArrayList<Integer>(); public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { if(listNode!=null){ this.printListFromTailToHead(listNode.next); arrayList.add(listNode.val); } return arrayList; } } //法2:利用ArrayList的add函数 实现先进后出的栈结构 O(n) import java.util.ArrayList; public class Solution { public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { ArrayList<Integer>list=new ArrayList<Integer>(); ListNode p=listNode; while(p!=null){ list.add(0,p.val);//每次插入到0位置 p=p.next; } return list; } } //用系统栈 import java.util.ArrayList; import java.util.Stack; public class Solution { public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { ArrayList<Integer>list=new ArrayList<Integer>(); Stack<Integer>stack=new Stack<Integer>(); while(listNode!=null){ stack.push(listNode.val); listNode=listNode.next; } ArrayList<Integer> list1=new ArrayList<Integer>(); while(!stack.isEmpty()){ list1.add(stack.pop()); } return list1; } }