剑指offer:从尾到头打印链表

题目

输入一个链表,按链表值从尾到头的顺序返回一个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     }
原文地址:https://www.cnblogs.com/huanglf714/p/11068259.html