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


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


    解法一:最简单的想法,先排序,再逆序

    import java.util.ArrayList;
    import java.util.Collections;
    public class Solution {
        public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
            ArrayList<Integer> integerList = new ArrayList<>();
     
            while (listNode != null) {
                integerList.add(listNode.val);
                listNode = listNode.next;
            }
            // 不想调用库函数也行,自己写一个叭
            Collections.reverse(integerList);
            return integerList;
        }
    }
    

    解法二:借助栈先进后出的原理,辅助实现逆序

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

    解法三:使用递归思想,递归其实也类似于栈的调用

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

    解法四:使用头插法实现

    对于 ArrayList 来说,数组元素移动的开销太大,不建议使用,但思路是不错的

    public class Solution {
        private ArrayList<Integer> list = new ArrayList<>();
        public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
            while(listNode != null) {
                list.add(0, listNode.val);
                listNode = listNode.next;
            }
            return list;
        }
    }
    

    小结:涉及到逆序问题,可以往以下方面考虑

    • 借助栈先进后出的特点
    • 递归也可以实现栈的作用
    • 头插法是把新结点插入首部,其余结点往后退,也是一个值得考虑的方案

  • 相关阅读:
    抽象类和接口
    【转载】Java 透析C/S和B/S结构
    java中的基本数据类型
    java之IO流详解(一)
    Yearning和inception搭建MySQL审核平台
    一个适合变化的产品部署集成包(nginx+jdk+tomcat+nodejs+mysql+redis+mongo+MYSQL主主(读写分离)集群建立+代码包+持续上线+备份)
    CPU计算密集型和IO密集型
    ansible结合SHELL搭建自己的CD持续交付系统
    JENKINS系统的安装部署
    DATAGUARD实施文档
  • 原文地址:https://www.cnblogs.com/Yee-Q/p/13658458.html
Copyright © 2011-2022 走看看