题目
输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
解题思路
在不改变链表结构的前提下,因为单向链表本身的结构是从头到尾的,现在用从尾到头遍历打印,可以联想到“先进后出”,
因此我们可以用栈保存链表节点,然后在输出栈即可。
根据这个思路又可以联想到递归本质上就是一个栈结构,于是又可以用递归来实现,我们要输出一个节点,先输出其后面的结点。
代码
思路一:栈实现
1 public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { 2 ArrayList<Integer> arrayList = new ArrayList<>(); 3 Stack<ListNode> stack = new Stack<>(); 4 while(listNode != null){ 5 stack.push(listNode); 6 listNode = listNode.next; 7 } 8 while(!stack.empty()){ 9 arrayList.add(stack.pop().val); 10 } 11 return arrayList; 12 }
思路二:递归实现
1 ArrayList<Integer> arrayList = new ArrayList<>(); 2 public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { 3 if(listNode!=null){ 4 printListFromTailToHead(listNode.next); 5 arrayList.add(listNode.val); 6 } 7 return arrayList; 8 }