1. 程式人生 > >[劍指offer] 從尾到頭列印連結串列(Java)

[劍指offer] 從尾到頭列印連結串列(Java)

題目描述

輸入一個連結串列,按連結串列值從尾到頭的順序返回一個ArrayList。

思路:從頭到尾把值輸入到棧裡面,然後出棧;或者用遞迴的方法;或者Collections的reverse()反轉list值

public class ListNode{
    int val;
    ListNode next=null;

    ListNode(int val) {
       this.val = val;
        }    
}

解法一:

import java.util.ArrayList;
import java.util.Stack;
public class Solution {
    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
        ArrayList<Integer> list = new ArrayList<Integer>();
        Stack<Integer> stack = new Stack<Integer>();
        if(listNode==null)
            return list;
        while(listNode!=null){
            stack.push(listNode.val);
            listNode = listNode.next;
        }
        while(!stack.empty()){
            list.add(stack.pop());
        }
        return list;
    }
}

解法二:

import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
        ArrayList<Integer> list = new ArrayList<Integer>();
        if(listNode==null)
            return list;
        if(listNode!=null){
            list = printListFromTailToHead(listNode.next);
            list.add(listNode.val);
        }
        return list;
    }
}

解法三:

import java.util.ArrayList;
import java.util.Collections;
public class Solution {
    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
        ArrayList<Integer> list = new ArrayList<Integer>();
        while(listNode!=null){
            list.add(listNode.val);
            listNode = listNode.next;
        }
        Collections.reverse(list);
        return list;
    }
}