网站首页 > 精选教程 正文
厚颜无耻的给大家要个赞,哈哈哈!创作不易希望大家可以多多鼓励鼓励。
今天我们一起聊一聊“逆序输出单向链表”,这也是一个比较常见的面试题了。我们公司最近招聘时有问到这个问题,但是也有一些回答不上来的,为此我想着写一篇文章,记录一下我知道的几种解决方案,以备不时之需,也希望可以帮助到有需要的人。
以下内容会涉及到:“链表数据结构、递归算法、栈。”如果有对这些不太了解的可以看一下之前的文章,都有详细的介绍。
什么是逆序输出单向链表
通过字面含义相信大家也能大概明白,所谓的逆序输出单向链表就是从链表尾部依次输出打印链表。这么一说是不是感觉还挺容易的。
题目含义明白了,现在就让我们动手实现一下。
第一种解决方案
思路:先将原链表进行翻转,然后打印翻转后的链表。
这种方式就不在此处进行演示了,如果大家不太了解反转链表,可以翻阅一下之前的文章,有一篇是专门介绍“反转单向链表”的。并且这种方式本人不建议使用,因为需要额外的创建出一条链表,效率比较低。
第二种解决方案
通过递归实现链表的逆序打印。
代码展示:
/**
* 逆序输出链表(使用递归)
*
* @param node
*/
public void showNode(Node node){
if(node.next != null){
// 没有到达链表尾部,递归调用本身。
showNode(node.next);
}
// 输出节点内容
System.out.println(node.data);
}
复制代码
代码讲解:每次调用方法时判断链表是否还有下一个节点,有的话递归调用本身,一直到链表尾部结束递归调用。然后依次从链表尾部输出每个节点的内容。为什么是从链表尾部输出每个节点,相信了解递归的都应该清楚,就不在此赘述了,如果有不是特别明白的,可以翻看一下之前的文章。
第三种解决方案
实现思路:通过栈结构“先进后出”的特性实现对链表的逆序输出。
代码展示:
/**
* 逆序输出链表(使用栈)
*/
public void reversePrint(Node headNode) {
if (headNode == null || headNode.next == null) {
return;
}
// 初始化栈
Stack<Node> stack = new Stack<>();
// 创建临时变量
Node cur = headNode.next;
while (cur != null) {
// 链表节点入栈
stack.push(cur);
// 后移变量
cur = cur.next;
}
// 弹栈
while (stack.size() > 0) {
System.out.println(stack.pop().data);
}
}
复制代码
代码讲解:每次循环从链表中获取一个节点压入栈中,直到将整个链表的节点都压入栈中。在依次将栈中的数据弹出,从而实现链表的逆序输出。
结语
以上就是我知道的三种逆序输出单向链表的方法,如果有更好的方式大家可以在评论区告诉我。今天的分享就到这了,如果文章哪里写的有问题的也希望大家可以提出来,我会积极修改,虚心受教,谢谢大家了。
- 上一篇: 反转链表 #leetcode 反转链表递归实现
- 下一篇: 链表:听说过两天反转链表又写不出来了?
猜你喜欢
- 2024-11-02 LeetCode-025-K 个一组翻转链表 每k个一组翻转链表
- 2024-11-02 C++算法(五)反转链表 反转链表c#
- 2024-11-02 61. 旋转链表 反转链表 头插法
- 2024-11-02 字节面试算法集第三题链表反转 #算法
- 2024-11-02 Java数据结构和算法—链表 java中的链表数据结构
- 2024-11-02 面试现场:如何实现链表的逆序? 链表逆置是什么意思
- 2024-11-02 LeetCode-206-反转链表 反转链表 迭代
- 2024-11-02 迭代法 链表翻转 #软件开发 迭代法程序
- 2024-11-02 每日算法---单链表反转和是否有环
- 2024-11-02 C++:挑战鹅厂面试题(一)--反转链表
你 发表评论:
欢迎- 04-11Java面试“字符串三兄弟”String、StringBuilder、StringBuffer
- 04-11Java中你知道几种从字符串中找指定的字符的数量
- 04-11探秘Java面试中问的最多的String、StringBuffer、StringBuilder
- 04-11Python字符串详解与示例(python字符串的常见操作)
- 04-11java正则-取出指定字符串之间的内容
- 04-11String s1 = new String("abc");这句话创建了几个字符串对象?
- 04-11java判断字符串中是否包含某个字符
- 04-11关于java开发中正确的发牌逻辑编写规范
- 最近发表
-
- Java面试“字符串三兄弟”String、StringBuilder、StringBuffer
- Java中你知道几种从字符串中找指定的字符的数量
- 探秘Java面试中问的最多的String、StringBuffer、StringBuilder
- Python字符串详解与示例(python字符串的常见操作)
- java正则-取出指定字符串之间的内容
- String s1 = new String("abc");这句话创建了几个字符串对象?
- java判断字符串中是否包含某个字符
- 关于java开发中正确的发牌逻辑编写规范
- windows、linux如何后台运行jar(并且显示进程名)
- 腾讯大佬私人收藏,GitHub上最受欢迎的100个JAVA库,值得学习
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)