[剑指offer]面试题5:从尾到头打印链表
面试题5:从尾到头打印链表
题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值。
链表结点定义如下:
struct ListNode
{int m_nKey;ListNode *m_pNext;
};
通常打印是一个只读操作,我们不希望打印时修改内容。
假设面试官也要求这个题目不能改变链表的结构。
接下来我们想到解决这个问题肯定要遍历链表。
遍历的顺序是从头到尾的顺序,可输出的顺序却是从尾到头。
也就是说第一个遍历到的结点最后一个输出,而最后一个遍历到的结点第一个输出。
这就是典型的“后进先出”,我们可以用栈实现这种顺序。
每经过一个结点的时候,把该结点放到一个栈中。
当遍历完整个链表后,再从栈顶开始逐个输出结点的值,此时输出的结点的顺序已经反转过来了。
这种思路的实现代码如下:
void PrintListReversingly_Iteratively(ListNode *pHead)
{stack<ListNode *>nodes;ListNode *pNode = pHead;while (pNode != nullptr){nodes.push(pNode);pNode = pNode->m_pNext;}while (!nodes.empty()){pNode = nodes.top();cout << pNode->m_nKey << " ";nodes.pop();}cout << endl;
}
既然想到了用栈来实现这个函数,而递归在本质上就是一个栈结构,于是很自然地又想到了用递归来实现。要实现反过来输出链表,我们每访问到一个结点的时候,先递归输出它后面的结点,再输出该结点自身,这样链表的输出结果就反过来了。
基于这样的思路,不难写出如下代码:
void PrintListReversingly_Iteratively(ListNode *pHead)
{if (pHead != nullptr){if (pHead->m_pNext != nullptr){PrintListReversingly_Iteratively(pHead->m_pNext);}cout << pHead->m_nKey << " ";}
}
上面的基于递归的代码看起来很简洁,但有个问题:当链表非常长的时候,就会导致函数调用的层级很深,从而有可能导致函数调用栈溢出。显式用栈基于循环实现的代码的鲁棒性要好一些。
测试用例:
● 功能测试(输入的链表有多个结点,输入的链表只有一个结点)。
● 特殊输入测试(输入的链表头结点指针为NULL)。
本题考点:
● 考查对单项链表的理解和编程能力。
● 考查对循环、递归和栈3个相互关联的概念的理解。
[剑指offer]面试题5:从尾到头打印链表相关推荐
- 剑指offer面试题[5]-从尾到头打印链表
目描述 输入一个链表,从尾到头打印链表每个节点的值. /** * struct ListNode { * int val; * struct ListNode *next ...
- 剑指Offer - 面试题6. 从尾到头打印链表(栈,递归,反转链表)
文章目录 1. 题目 2. 解题 2.1 stack解题 2.2 递归 2.3 反转链表 1. 题目 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回). 示例 1: 输入:head ...
- 剑指offer 面试题5—从尾到头打印链表
题目: 输入一个链表的头结点,从尾到头反过来打印出每个结点的值. 考虑用栈 public void invertedList1(ListNode head) {if (head == null) {r ...
- 剑指offer面试题06. 从尾到头打印链表(辅助栈法)
题目描述 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回). 思路 详见链接 代码 class Solution:def reversePrint(self,head:ListNod ...
- 剑指Offer - 九度1511 - 从尾到头打印链表
剑指Offer - 九度1511 - 从尾到头打印链表2013-11-29 21:08 题目描述: 输入一个链表,从尾到头打印链表每个节点的值. 输入: 每个输入文件仅包含一组测试样例. 每一组测试案 ...
- 剑指offer java版 test3—从尾到头打印链表
标题:剑指offer java版 test3-从尾到头打印链表 题目:输入一个链表,按链表从尾到头的顺序返回一个ArrayList. 解答:知识不够全面,用ArrayList做的 但是看到大佬们还可以 ...
- 【剑指offer】登峰造极之从尾到头打印链表
题目链接 从尾到头打印链表. 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M 热度指数:1254529 题目描述 /** struct ListNode { i ...
- 剑指offer(C++)-JZ6:从尾到头打印链表(数据结构-链表)
作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 输入一个链表的头节点,按链表从尾到头的顺序返回每个节点的值(用数组返回). 如输入{ ...
- 【剑指offer-Java版】05从尾到头打印链表
从头到尾打印链表:递归实现比较简单 注意处理异常输入:如输入指针为空 处理边界条件等即可 public class _Q05 {public static void main(String[] arg ...
- 剑指offer——面试题60:把二叉树打印成多行
剑指offer--面试题60:把二叉树打印成多行 Solution1: 20180911重做.经典题目.牢记做法! /* struct TreeNode {int val;struct TreeNod ...
最新文章
- 【错误记录】集成 Tinker 热修复报错 ( No such property: variantConfiguration for class: .ApplicationVariantData )
- 淘宝大数据之路【转】
- 还原JavaScript的真实历史~
- C# 获取并判断操作系统版本,解决Win10、 Windows Server 2012 R2 读取失败的方案
- python flask项目过程_Python 开发过程遇到的问题
- session实现购物车
- listview bcb 行的颜色_文明交通安全行手抄报简单又漂亮
- 人工智能——数据、信息与知识
- Linux系统管理第六周作业【Linux微职位】
- Tomcat加载类机制 - 我们到底能走多远系列(14)
- 游戏开发之C++多继承及虚继承(C++基础)
- 计算机语言em,Python:EM(期望极大算法)实战
- Java--中文转换拼音,jpinyin-1.0.jar
- Google Analytics API V4(谷歌统计实战)
- 基于MAC地址划分VLAN
- treefrog之视图 ERB
- Spring Boot+Vue/前后端分离/高并发/秒杀实战课程之spring Security快速搭建oauth2 内存版身份认证
- 脱 PECompact 2.x - Jeremy Collake 壳
- win10浏览器服务器代理设置
- 怎么实现黑白负片爆闪效果,有Vegas就足够啦
热门文章
- 那一年,我考入了西北师范大学GIS专业,然而我很迷茫,GISer的职业规划到底是怎样的?
- IOS之学习笔记十四(协议的定义和实现)
- Android之java.lang.UnsatisfiedLinkError(Failed to register native method ***callMethod1())解决办法
- Android插件化开发之DexClassLoader动态加载dex、jar小Demo
- 5.7.21mysql数据库_【数据库】mysql5.7.21 winx64安装配置图文分享
- 裸奔、抽烟、凡尔赛,原来数学家玩得这么野……
- 小眼睛有多惨?美颜都懒得救你......
- 程序猿专属成语 get√
- java stream 求和_谈谈Java任务的并行处理
- lua loadstring传递参数_lua学习之函数篇