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

题目描述:

从尾到头打印链表:输入一个链表,从尾到头打印链表每个节点的值。

思路:

尽量不改变原输入数据的结构,比如不要将指针改为从尾到头
非递归:使用栈操作,从头到尾入栈,从尾到头出栈即可

递归:更加简洁的代码,当访问某个节点时,先输出它的后一个节点

 1 public class Lianbiaotoudaowei {
 2     //非递归,栈操作
 3     public ArrayList<Integer> printListFromTailToHead(ListNode listNode){
 4         Stack<Integer> stack = new Stack<>();
 5         ArrayList<Integer> list = new ArrayList<Integer>();
 6         while(listNode!=null){
 7             stack.add(listNode.val);
 8             listNode = listNode.next;
 9         }
10         while(!stack.isEmpty()){
11             list.add(stack.pop());
12         }
13         return list;
14     }
15     //递归:
16     public ArrayList<Integer> printListFromTailToHead(ListNode listNode){
17         ArrayList<Integer> list = new ArrayList<>();
18         if(listNode!=null){
19             if(listNode.next!=null){
20                 list = printListFromTailToHead(listNode.next);
21             }
22             list.add(listNode.val);
23         }
24         return list;
25     }
26     public static void main(String[] args) {
27         // TODO Auto-generated method stub
28         ListNode listNode = new ListNode(1);
29         listNode.next = new ListNode(2);
30         listNode.next = new ListNode(3);
31         listNode.next = new ListNode(4);
32         listNode.next = new ListNode(5);
33         
34         Lianbiaotoudaowei lianbiaotoudaowei = new Lianbiaotoudaowei();    
35         System.out.println(lianbiaotoudaowei.printListFromTailToHead(listNode));
36     }
37     
38 }

 



posted @ 2018-03-09 11:21  zlz099  阅读(75)  评论(0编辑  收藏  举报