
剑指 offer之从尾到头打印链表_java
发布日期:2021-05-07 02:40:33
浏览次数:30
分类:精选文章
本文共 1224 字,大约阅读时间需要 4 分钟。
题目:从尾到头打印链表
题目描述 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。 解题思路: 询问面试官需求: (1)可以更改链表结构:可以反转链表,再从头遍历 (2)通常打印只是一个只读操作,不希望打印时修改链表的结构 a. 用栈实现:每经过一个节点,把给节点放在栈中,当遍历整个链表后,再从栈顶逐个输出节点的值,此时输出节点的顺序已经反转过来了。 b. 递归:每次访问到一个节点的时候,先递归输出它后面的节点,再输出该节点本身,这样链表的输出结果就反过来了。 第一种思路:用栈实现/*** public class ListNode {* int val;* ListNode next = null;** ListNode(int val) {* this.val = val;* }* }**/import java.util.ArrayList;import java.util.*;public class Solution { public ArrayListprintListFromTailToHead(ListNode listNode) { //存放结果集 ArrayList res=new ArrayList<>(); ListNode node=listNode; Stack sk=new Stack<>(); while(node!=null) { sk.push(node.val); node=node.next; } while(!sk.isEmpty()) { res.add(sk.pop()); } return res; }}
第二种思路:递归
public class Solution { //存放结果集 ArrayListres=new ArrayList<>(); public ArrayList printListFromTailToHead(ListNode listNode) { ListNode node=listNode; if(node!=null){ printListFromTailToHead(node.next); res.add(node.val); } return res; }}
上面给予递归的代码看起来很简洁,但是有一个问题,当链表非常长的时候,就会导致函数的调用层级很深,从而有可能导致函数调用栈溢出。显式用栈给予循环实现的代码的鲁棒性要好一些。
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2025年04月10日 22时48分24秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
(C++11/14/17学习笔记):线程启动、结束,创建线程多法、join,detach
2021-05-07
HTML 和 CSS 简单实现注册页面
2021-05-07
趣谈win10常用快捷键
2021-05-07
11.2.6 时间值的小数秒
2021-05-08
Redis源码分析(七)--- zipmap压缩图
2021-05-08
【MySQL】(九)触发器
2021-05-08
Oracle 11G环境配置
2021-05-08
【Python】(十二)IO 文件处理
2021-05-08
【Oozie】(三)Oozie 使用实战教学,带你快速上手!
2021-05-08
师兄面试遇到这条 SQL 数据分析题,差点含泪而归!
2021-05-08
C语言的数值溢出问题(上)
2021-05-08
8051单片机(STC89C52)以定时器中断模式实现两倒计时器异步计时
2021-05-08
vue项目通过vue.config.js配置文件进行proxy反向代理跨域
2021-05-08
android:使用audiotrack 类播放wav文件
2021-05-08
聊聊我的五一小假期
2021-05-08
数据库三个级别封锁协议
2021-05-08
ACM/NCPC2016 C Card Hand Sorting(upc 3028)
2021-05-08
ubuntu学习笔记-常用文件、命令以及作用(hosts、vim、ssh)
2021-05-08