美文网首页剑指offer
05_从尾到头打印链表

05_从尾到头打印链表

作者: 是新来的啊强呀 | 来源:发表于2020-05-18 17:33 被阅读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;
        }

    相关文章

      网友评论

        本文标题:05_从尾到头打印链表

        本文链接:https://www.haomeiwen.com/subject/itxuohtx.html