31.从尾到头输出链表[Print linked list from last to first]
【题目】
输入一个链表的头结点,从尾到头反过来输出每个结点的值。
【分析】
这是一道很有意思的面试题。该题以及它的变体经常出现在各大公司的面试、笔试题中。
- 【链表逆置】
 
看到这道题后,第一反应是从头到尾输出比较简单。于是很自然地想到把链表中链接结点的指针反转过来,改变链表的方向。然后就可以从头到尾输出了。但该方法需要额外的操作,应该还有更好的方法。
- 【使用stack存储】
 
接下来的想法是从头到尾遍历链表,每经过一个结点的时候,把该结点放到一个栈中。当遍历完整个链表后,再从栈顶开始输出结点的值,此时输出的结点的顺序已经反转过来了。该方法需要维护一个额外的栈,实现起来比较麻烦。
- 【递归实现】
 
既然想到了栈来实现这个函数,而递归本质上就是一个栈结构。于是很自然的又想到了用递归来实现。要实现反过来输出链表,我们每访问到一个结点的时候,先递归输出它后面的结点,再输出该结点自身,这样链表的输出结果就反过来了。
【代码】
| 
 1 
2 3 4 5 6 7 8 9 10 11  | 
 
void PrintListReversely(ListNode *pHead) 
{ if (pHead != NULL) { // print next node first PrintListReversely(pHead->m_pNext); // print this node printf("%d", pHead->m_pKey); } }  | 
【扩展】
该题还有两个常见的变体。
1.从尾到头输出一个字符串
| 
 1 
2 3 4 5 6 7 8 9  | 
 
void PrintStringReversely(char *str) 
{ if (NULL != str && *str != '\0') { PrintStringReversely(str + ); printf("%c", *str); } }  | 
2.定义一个函数求字符串的长度,要求该函数体内不能声明任何变量。
| 
 1 
2 3 4 5 6 7  | 
 
int GetStringLength(char *str) 
{ if (NULL != str && *str != '\0') ; ; }  | 
【参考】
http://zhedahht.blog.163.com/blog/static/2541117420079237185699/
31.从尾到头输出链表[Print linked list from last to first]的更多相关文章
- 九度OJ 1511 从尾到头打印链表
		
题目地址:http://ac.jobdu.com/problem.php?pid=1511 题目描述: 输入一个链表,从尾到头打印链表每个节点的值. 输入: 每个输入文件仅包含一组测试样例. 每一组测 ...
 - [Jobdu] 题目1511:从尾到头打印链表——单链表的倒置输出
		
// ListNode typedef struct LNode { int key; struct LNode *next; }LNode; 分析:这是一道很有意思的面试题,此题以及此题的变体经 ...
 - 从尾到头打印链表(C++和Python 实现)
		
(说明:本博客中的题目.题目详细说明及参考代码均摘自 “何海涛<剑指Offer:名企面试官精讲典型编程题>2012年”) 题目 输入一个链表的头结点, 从尾到头反过来打印出每个结点的值. ...
 - 九度oj题目1511:从尾到头打印链表
		
题目1511:从尾到头打印链表 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:6010 解决:1805 题目描述: 输入一个链表,从尾到头打印链表每个节点的值. 输入: 每个输入文件仅包 ...
 - 【剑指Offer面试编程题】题目1511:从尾到头打印链表--九度OJ
		
题目描述: 输入一个链表,从尾到头打印链表每个节点的值. 输入: 每个输入文件仅包含一组测试样例. 每一组测试案例包含多行,每行一个大于0的整数,代表一个链表的节点.第一行是链表第一个节点的值,依次类 ...
 - 【剑指Offer】06. 从尾到头打印链表 解题报告(Java & python)
		
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 解题方法 栈 递归 数组 日期 题目地址:https://leetcode ...
 - 剑指Offer面试题:4.从尾到头打印链表
		
一.题目:从尾到头打印链表 题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值. 到解决这个问题肯定要遍历链表.遍历的顺序是从头到尾的顺序,可输出的顺序却是从尾到头.也就是说第一个遍历到的结 ...
 - 剑指Offer 从尾到头打印链表
		
题目描述 输入一个链表,从尾到头打印链表每个节点的值. 输入描述: 输入为链表的表头 输出描述: 输出为需要打印的“新链表”的表头 思路: 用容器vector,递归到最后一个元素,push_back到 ...
 - offer--链表反转和从尾到头打印链表
		
这个是高频的面试题,今天总结了一些.反转链表用三个指针实现,返回新链表的头节点:而从尾到头打印,应用栈实现,返回vector整个链表. //题目描述 // //输入一个链表,反转链表后,输出链表的所有 ...
 
随机推荐
- UML 几种关系的理解
			
1,泛化关系 泛化关系的表现形式有3中,类A 集成类B ,接口C 继承 接口D ,或者类E实现类F. 2,组合关系 组合关系描述的是整体与局部的关系,一个整体有很多部分组成,即整体包含的部分. 例 ...
 - shell--题目
			
1.有一个文件,里面有二列,第一列ip地址,第二列是时间,同一个ip可能出现多次,但时间不同. 文件类似下面的样子: 192.168.1.2 13:10 192.127.12 ...
 - 解决启动Biee控制台乱码问题
			
在安装完Biee后,大家都可以看到在程序中可以找到启动BI服务的地方 点击上图中的启动bi服务则在window系统中会弹出一个dos窗口,来显示执行启动服务的操作,如下图 上图显示的是正常情况,本人安 ...
 - 【BZOJ】【1009】 【HNOI2008】GT考试
			
DP/KMP/矩阵乘法 好神的题啊……跪了跪了 $n\leq 10^9$是什么鬼……我们还是先不要考虑这个鬼畜的玩意了>_> 用类似数位DP的思路,我们可以想到一个DP方程:$f[i][j ...
 - 简短的几句js实现css压缩和反压缩功能
			
写在前面 最近一直在整理css,但因为现在Visual Studio 2013太智能了,它每每在我按ctrl+E+D进行格式化代码的时候,就会将css进行层次格式化(如下图所示),而这个格式让我老大实 ...
 - POJ1845Sumdiv(求所有因子和 + 唯一分解定理)
			
Sumdiv Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 17387 Accepted: 4374 Descripti ...
 - POJ2387 Til the Cows Come Home(SPFA + dijkstra + BallemFord 模板)
			
Til the Cows Come Home Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 37662 Accepted ...
 - php验证是否是中文
			
header("content-type:text/html;charset=utf-8");$str = "编";if (preg_match("/ ...
 - JavaScript 技巧总结
			
日期1. 日期时间戳 +new Date() = new Date().getTime() 数组1. 类数组转数组 var arr = Array.prototype.slice.call(argum ...
 - html中input输入框屏蔽鼠标右键
			
<label> <input id="ckdestinationId" type="text" oncontextmenu="ret ...