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

题目描述

输入一个链表,从尾到头打印链表每个节点的值。
 
1.代码实现(Java)
思路一:借助递归实现
 1 /**
 2 *    public class ListNode {
 3 *        int val;
 4 *        ListNode next = null;
 5 *
 6 *        ListNode(int val) {
 7 *            this.val = val;
 8 *        }
 9 *    }
10 *
11 */
12 import java.util.ArrayList;
13 public class Solution {
14     public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
15         ArrayList<Integer> list=new ArrayList<Integer>();
16         ListNode mNode=listNode;
17         if(mNode!=null){
18             if(mNode.next!=null){
19                 list=printListFromTailToHead(mNode.next);
20             }
21             list.add(mNode.val);
22         }
23         return list;
24     }
25 }

思路二:借助栈的“后进先出”

 1 /**
 2 *    public class ListNode {
 3 *        int val;
 4 *        ListNode next = null;
 5 *
 6 *        ListNode(int val) {
 7 *            this.val = val;
 8 *        }
 9 *    }
10 *
11 */
12 import java.util.ArrayList;
13 import java.util.Stack;
14 public class Solution {
15     public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
16         ArrayList<Integer> mList=new ArrayList<Integer>();
17         Stack<Integer> mStack=new Stack<Integer>();
18         ListNode mNode=listNode;
19         while(mNode!=null){
20             mStack.push(mNode.val);
21             mNode=mNode.next;
22         }
23         while(!mStack.empty()){
24             mList.add(mStack.pop());
25         }
26         return mList;
27     }
28 }

思路三:反链表

 1 /**
 2 *    public class ListNode {
 3 *        int val;
 4 *        ListNode next = null;
 5 *
 6 *        ListNode(int val) {
 7 *            this.val = val;
 8 *        }
 9 *    }
10 *
11 */
12 import java.util.ArrayList;
13 import java.util.Stack;
14 public class Solution {
15     public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
16         ArrayList<Integer> mList=new ArrayList<Integer>();
17         ListNode pre=null;
18         ListNode next=null;
19         while(listNode!=null){
20             next=listNode.next;
21             listNode.next=pre;
22             pre=listNode;
23             listNode=next;
24         }
25         while(pre!=null){
26             mList.add(pre.val);
27             pre=pre.next;
28         }
29         return mList;
30     }
31 }

 

 

posted on 2018-03-18 23:41  Joyce&wang  阅读(116)  评论(0)    收藏  举报

导航