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;
        }
    }
    -- 整理于网络,加上自己的理解,大家一起学习,进步就好
  • 相关阅读:
    windows运行shell脚本
    Android Webview H5资源本地化
    Vscode开发Python环境安装
    Vscode开发Java环境搭建
    为什么索引可以提高效率?
    Java内存模型
    栈和队列----向有序的环形单链表中插入新节点
    栈和队列----单链表的选择排序
    栈和队列----将搜索二叉树转换成双向链表
    栈和队列----在单链表中删除指定值的节点
  • 原文地址:https://www.cnblogs.com/shulipeng/p/9017291.html
Copyright © 2011-2022 走看看