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;
        }
    }
    -- 整理于网络,加上自己的理解,大家一起学习,进步就好
  • 相关阅读:
    vue element-ui配置第三方图标库
    HTTP协议:状态码
    HTTP协议:无状态
    CDN:基础知识
    【转载】浅析机器视觉中的照明系统(该如何打光)
    nginx 端口转发
    Gitlab 备份 | 恢复 | 卸载 | 迁移 | 版本升级
    微信小程序支付服务端.net core实现,简单直接
    生产级gitlab备份
    背锅之旅:前任对我的爱-只备份不删除导致的磁盘爆满
  • 原文地址:https://www.cnblogs.com/shulipeng/p/9017291.html
Copyright © 2011-2022 走看看