1. 程式人生 > >劍指Offer面試題5 Java解法

劍指Offer面試題5 Java解法

題目:輸入一個連結串列,從尾到頭列印連結串列每個節點的值。 
輸入描述:
輸入為連結串列的表頭
輸出描述:
輸出為需要列印的“新連結串列”的表頭
該題的解題思路是遞迴或者是棧:
遞迴解法:
public static void printListReverse1(ListNode headNode){
       if (headNode != null){
           if(headNode.next != null){
               printListReverse1(headNode.next);
           }
       }
       System.out.println(headNode.val);

    }
棧的解法:
 public static void printListReverse(ListNode headNode){
        Stack<ListNode> stack = new Stack<ListNode>();
        while (headNode != null){
            stack.push(headNode);
            headNode = headNode.next;
        }
        while (!stack.empty()){
            System.out.println(stack.pop().val);
        }
    }
還有這種遞迴方法挺難理解的,現在我還是不咋理解哈哈,debug一下看到了程式走的步驟,反正讓我寫我是寫不出來,有興趣的可以思考下:
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;
    }
}