zoukankan      html  css  js  c++  java
  • 从尾到头打印链表【剑指offer第三题】

    题目:输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。

    解法一:从头到尾遍历链表,从尾到头打印链表。类似的像我们学过的一个数据结构:栈(先进后出)

    遍历链表,如果链表不为空就入栈。当链表中所有数据都进入栈里后。再从栈顶开始弹出栈中。并存到list集合中。

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

    通过时间19ms

    第二种方法:递归的本质就是一个栈结构。以n!为例说说递归。

    当n=5时。相当于:

    5*jc(4)

    5*4*jc(3)

    5*4*3*jc(2)

    5*4*3*2*jc(1)

    5*4*3*2*1

    所以递归相当于不断的调用自己本身,直到遇到临界结点时才跳出。依次返回结果。就相当于栈一直往深了走,到头了再转头往回走。

    import java.util.ArrayList;
    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;
        }
    }

    运行时间:24ms

    苟有恒,何必三更眠五更起;最无益,莫过一日暴十日寒。
  • 相关阅读:
    CF1539 VP 记录
    CF1529 VP 记录
    CF875C National Property 题解
    CF1545 比赛记录
    CF 1550 比赛记录
    CF1539E Game with Cards 题解
    CF1202F You Are Given Some Letters... 题解
    vmware Linux虚拟机挂载共享文件夹
    利用SOLR搭建企业搜索平台 之九(solr的查询语法)
    利用SOLR搭建企业搜索平台 之四(MultiCore)
  • 原文地址:https://www.cnblogs.com/shaer/p/10244713.html
Copyright © 2011-2022 走看看