zoukankan      html  css  js  c++  java
  • 剑指offer——从尾到头打印链表

    输入一个链表,从尾到头打印链表每个节点的值。

    /**
    *    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中即可

    ArrayList的初始化

    ArrayList<Integer> arrayList = new ArrayList<Integer>();
    

      

    其次,集合的大小用size(),数组的大小用length()

    ArrayList的t添加:add(E object)

    获取:get(int location)

    ArrayList的遍历方式

    public class ArrayListDemo {  
        public static void main(String[] args) {  
            List<String> al = new ArrayList<String>();  
            al.add("wangw1");  
            al.add("wangw3");  
            al.add("wangw4");  
            al.add("wangw5");  
              
            //遍历方式1  
            Iterator<String> it1 = al.iterator();  
            while(it1.hasNext()){  
                System.out.println(it1.next());  
            }  
              
            //遍历方式2  
            for(Iterator it2 = al.iterator();it2.hasNext();){  
                System.out.println(it2.next());  
            }  
              
            //遍历方式3  
            for(String temp:al){  
                System.out.println(temp);  
            }  
              
            //遍历方式4  
            for(int i = 0;i<al.size();i++){  
                System.out.println(al.get(i));  
            }  
        }  
    }  
    

      

    自己的解法:

    import java.util.ArrayList;
    public class Solution {
        public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
            if(listNode == null || listNode.next == null){
                return new ArrayList<Integer>();
            }
            ArrayList<Integer> array = new ArrayList<Integer>();
            ListNode list = listNode;
            while(list.next != null){
                array.add(list.val);
                list = list.next;
            }
            ArrayList<Integer> arrayList = new ArrayList<Integer>();
            arrayList.add(list.val);
            for(int i = array.size() - 1; i >= 0; --i ){
                arrayList.add(array.get(i));
            }
            return arrayList;
        }
    }
    

      

    利用栈:

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

      

    别人的递归调用:

    注意返回结果arrayList是定义在外面的,而且,里面遍历链表是用的if,不是循环

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

      

  • 相关阅读:
    -Dmaven.test.skip=true 和 -DskipTests
    mysql 生成指定范围随机数
    Delphi 6 保存窗体设置
    Sql server left join,right join和inner join的比较
    Mysql配置文件my.ini详解
    网络游戏MMORPG服务器架构
    彻底删除SVN版本库中部分文件或文件夹
    高负载高并发应用 参考索引 地址
    Linux计划任务入门详解
    Linux下SVN的三种备份方式
  • 原文地址:https://www.cnblogs.com/SkyeAngel/p/8521239.html
Copyright © 2011-2022 走看看