zoukankan      html  css  js  c++  java
  • 003 从尾到头打印链表(栈或递归)

    从尾到头打印链表(关键:用栈)

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

    分析:

    listNode 是链表,只能从头遍历到尾,但是输出却要求从尾到头,这是典型的"先进后出",我们可以想到栈!
    ArrayList 中有个方法是 add(index,value),可以指定 index 位置插入 value 值
    所以我们在遍历 listNode 的同时将每个遇到的值插入到 list 的 0 位置,最后输出 listNode 即可得到逆序链表

    //自己的实现方法
    /**
    *    public class ListNode {
    *        int val;
    *        ListNode next = null;
    *
    *        ListNode(int val) {
    *            this.val = val;
    *        }
    *    }
    *
    */
    import java.util.ArrayList;
    public class Solution {
        public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
             //定义栈
                ArrayList<Integer> stack = new ArrayList<>();
                ArrayList<Integer> result = new ArrayList<>();
                //ListNode tmp = listNode;
                while (listNode!=null)
                {
                    stack.add(listNode.val);
                    listNode = listNode.next;
                }
                
                int p = stack.size();
                while (p-- > 0)
                {
                    result.add(stack.get(p));
                }
                return result;
            
        }
    }
    

    使用Java自带的栈Stack(自己实现,牛客网通过)

     public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
             //定义栈
             Stack<Integer> stack = new Stack<>();
             while(listNode!=null)
             {
                 stack.push(listNode.val);//入栈
                 listNode = listNode.next;
             }
            
             //出栈
             ArrayList<Integer> lst = new ArrayList<>();
             while(!stack.isEmpty())
                 lst.add(stack.pop());
            
             return lst;        
        }
    

    递归(自己实现,牛客网通过)

    /**
    *    public class ListNode {
    *        int val;
    *        ListNode next = null;
    *
    *        ListNode(int val) {
    *            this.val = val;
    *        }
    *    }
    *
    */
    import java.util.ArrayList;
    import java.util.*;
    public class Solution {
        
        // 注意:因为要用递归,存放结果的list要放在外面
        ArrayList<Integer> lst = new ArrayList<>(); 
        
        public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {    
            
            if(listNode!=null) // 判断当前指针指向的结点是否为空
            {
                if(listNode.next!=null) // 判断下一个结点是否为空
                {
                    printListFromTailToHead(listNode.next);             
                }
                lst.add(listNode.val);
            }        
             return lst;     
        }
    }
    
    // 别人的代码
    import java.util.*;
    public class Solution {
        public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
            ArrayList<Integer> list = new ArrayList<>();
            ListNode tmp = listNode;
            while(tmp!=null){
                list.add(0,tmp.val);
                tmp = tmp.next;
            }
            return list;
        }
    }
    
  • 相关阅读:
    flutter_bloc使用解析骚年,你还在手搭bloc吗!
    白嫖JetBrains正版全家桶!
    一文总结设计模式
    201671010119 201620172《Java程序设计》第五周学习心得
    201671010119 201620172《Java程序设计》第二周学习心得
    201671010119 201620172《Java程序设计》第三周学习心得
    201671010119 201620172《Java程序设计》第八周学习心得
    201671010119 201620172《Java程序设计》第四周学习心得
    201671010119 201620172《Java程序设计》第六周学习心得
    201671010119 201620172《Java程序设计》第一周学习心得
  • 原文地址:https://www.cnblogs.com/helloHKTK/p/11630919.html
Copyright © 2011-2022 走看看