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整个链表. //题目描述 // //输入一个链表,反转链表后,输出链表的所有 ...
随机推荐
- hdu1281 二分匹配
求重要的点.那就可以通过枚举来找:先做一次最大匹配,求出匹配数.然后逐一枚举这些点.如果匹配数改变,那就是重要点: #include<stdio.h> #include<string ...
- Java设计模式-抽象工厂模式(Abstract Factory )
工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这 ...
- Codeforces 650C Table Compression
传送门 time limit per test 4 seconds memory limit per test 256 megabytes input standard input output st ...
- 设定JS全局的公共变量
1. 新建一个标签文件 javaScriptVariables.tag 新建一个标签文件 javaScriptVariables.tag放在 %/HelloWorldWebPro/webroot/WE ...
- Message
* Defines a message containing a description and arbitrary data object that can be* sent to a {@link ...
- [Angularjs]视图和路由(二)
写在前面 上篇文章主要介绍了视图和路由的基本概念,并在文章最后举了一个简单的使用案例.这篇文章将继续学习路由的配置,及相关参数的说明. 系列文章 [Angularjs]ng-select和ng-opt ...
- [Angularjs]单页应用之分页
写在前面 在项目中,用到单页应用的分页,当时想到使用滚动加载的方案,可是几次尝试都没配置成功,闲着无聊就弄了一个demo. 系列文章 [Angularjs]ng-select和ng-options [ ...
- Android SDK安装教程
1.下载安装JDK(java 开发套件),天空软件站下载http://www.skycn.com/soft/3116.html(或 到java官网下载),下载后双击安装即可. 2.下载android ...
- Cocoa的MVC架构分析 cocoa的mvc实现
Cocoa是Mac OS和iPhone OS上的开发框架,使用Objective-C做为开发语言.当然,在代码中也可以嵌入C和C++的语句.初识Objective-C时会觉得它的语法很奇怪,但本质上和 ...
- QQ 腾讯QQ(简称“QQ”)是腾讯公司开发的一款基于Internet的即时通信(IM)软件
QQ 编辑 腾讯QQ(简称“QQ”)是腾讯公司开发的一款基于Internet的即时通信(IM)软件.腾讯QQ支持在线聊天.视频通话.点对点断点续传文件.共享文件.网络硬盘.自定义面板.QQ邮箱等多种功 ...