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

    1.问题:输入一个链表,从尾到头打印链表每个节点的值。        

    /**
    *    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) {
            
        }
    }

    2.思路:①使用递归

               ②使用迭代之后再反转 list

               ③使用 Stack , 利用它的 LIFO(后进先出) 的特性(前提是允许使用 Stack)

    3.代码:

    ①:使用递归

     public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
            ArrayList<Integer> result = new ArrayList<>();
            if(listNode != null){
                addToList(listNode,result);
            }
            return result;
        }
        
      public void addToList(ListNode listNode,ArrayList<Integer> result){
            if(listNode.next != null){
                getNode(listNode.next,result);
            }
            //只有在当前节点中没有下个节点的时候才会执行添加方法
            result.add(listNode.val);
        }

    ②:使用迭代之后再反转 list

    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
            
            ArrayList<Integer> tempList = new ArrayList<>();
            
            while(listNode != null){
                tempList.add(listNode.val);
                listNode = listNode.next;
            }
            
            ArrayList<Integer> result = new ArrayList<>(tempList.size());
            for(int i = tempList.size()-1; i >= 0; i--){
                result.add(tempList.get(i));
            }
            return result;
        }

    ③:使用 Stack , 利用它的 LIFO(后进先出) 的特性

    import java.util.Stack;
    import java.util.ArrayList;
    public class Solution {
        
        public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
            Stack<Integer> stack = new Stack<>();
            while(listNode != null){
                stack.push(listNode.val);
                listNode = listNode.next;
            }
            
            ArrayList<Integer> result = new ArrayList<>(stack.size());
            while(!stack.isEmpty()){
                result.add(stack.pop());
            }
            return result;
        }
    }
    -- 整理于网络,加上自己的理解,大家一起学习,进步就好
  • 相关阅读:
    Html页面添加百度地图
    Redis Sentinel主从高可用方案
    redis分布式锁-SETNX实现
    使用RestTemplate访问restful服务时遇到的问题
    RestTemplate
    webservice服务器端获取request对象的三种方式
    Apache软件基金会项目百度百科链接
    JAX-RPC 与 JAX-WS 的比较
    angular+ionic前后端分离开发项目中的使用
    WebService之soap类型的服务和rest类型的服务
  • 原文地址:https://www.cnblogs.com/shulipeng/p/9017291.html
Copyright © 2011-2022 走看看