【剑指Offer】输入一个链表,按链表从尾到头的顺序返回一个ArrayList

输入一个链表,按链表从尾到头的顺序返回一个ArrayList。

思路一:使用栈先进后出的特点
 /**
     * 使用栈
     * @param listNode
     * @return
     */
    public static ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
     
        ArrayList<Integer> list = new ArrayList<>();
        if (listNode == null) return list;
        if (listNode.next == null) {
     
            list.add(listNode.val);
            return list;
        }
        //先将链表放入栈中,在逐个弹栈即可
        Stack<Integer> stack = new Stack<>();
        while (true) {
     
            if(listNode == null){
     
                break;
            }
            stack.push(listNode.val);
            listNode = listNode.next;
        }
        while (!stack.isEmpty()){
     
            list.add(stack.pop());
        }
        return list;
    }
}
思路二:利用递归
    /**
     * 使用递归
     * @param listNode
     * @return
     */
    static ArrayList<Integer> listRecursion = new ArrayList<>();

    public static ArrayList<Integer> printListFromTailToHead2(ListNode listNode) {
     
        if(listNode !=null){
     
            printListFromTailToHead2(listNode.next);
            listRecursion.add(listNode.val);
        }
        return listRecursion;
    }

节点类

public class InversionOfLinkedList {
     
   /**
   节点类
   */
class ListNode {
     
    int val;
    ListNode next = null;

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

你可能感兴趣的:(数据结构与算法,链表,算法)