剑指offer

05_从尾到头打印链表

2020-05-18  本文已影响0人  是新来的啊强呀

要求:输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
思路:
方法1:使用递归的方法,递归在本质上就是一个栈结构。故,每访问到一个节点的时候,先递归输出它后面的节点,再输出该节点自身,这样链表的输出结果接反过来了。
方法2:使用先入后出的思想,将原数组从头到尾取出,再依次加入到新的数组中,此时得到的新数组就是反过来的。
方法3:使用栈方法

// 方法一,递归的方法
    public void printListFromTailToHead(ListNode node){
        if(node != null){  // 退出条件是node到达尾部
            printListFromTailToHead(node.next);
            System.out.println(node.val+",");
        }
    }
// 方法二,利用先入后出的方法
    public ArrayList<Integer> printFromTail(){
        ArrayList<Integer> list = new ArrayList<>();
        ListNode temp = head;
        while(temp!=null){
            list.add(0,temp.val);  // 加入到新的集合中
            temp = temp.next;
        }
        return list;
    }

    // 使用栈方法
    public ArrayList<Integer> printListFromTailst(){
        Stack<Integer> stack = new Stack();
        ArrayList<Integer> list = new ArrayList<>();
        ListNode temp = head;
        while(temp!= null){
            stack.push(temp.val);
            temp = temp.next;
        }
        while(!stack.isEmpty()){
            list.add(stack.pop());
        }
        return list;
    }
上一篇下一篇

猜你喜欢

热点阅读