【题目】

输入一个链表的头结点,从尾到头反过来输出每个结点的值。

【分析】

这是一道很有意思的面试题。该题以及它的变体经常出现在各大公司的面试、笔试题中。

  • 【链表逆置】

看到这道题后,第一反应是从头到尾输出比较简单。于是很自然地想到把链表中链接结点的指针反转过来,改变链表的方向。然后就可以从头到尾输出了。但该方法需要额外的操作,应该还有更好的方法。

  • 【使用stack存储】

接下来的想法是从头到尾遍历链表,每经过一个结点的时候,把该结点放到一个栈中。当遍历完整个链表后,再从栈顶开始输出结点的值,此时输出的结点的顺序已经反转过来了。该方法需要维护一个额外的栈,实现起来比较麻烦。

  • 【递归实现】

既然想到了栈来实现这个函数,而递归本质上就是一个栈结构。于是很自然的又想到了用递归来实现。要实现反过来输出链表,我们每访问到一个结点的时候,先递归输出它后面的结点,再输出该结点自身,这样链表的输出结果就反过来了。

【代码】

 C++ Code 
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.从尾到头输出一个字符串

 C++ Code 
1
2
3
4
5
6
7
8
9
 
void PrintStringReversely(char *str)
{
    if (NULL != str && *str != '\0')
    {
        PrintStringReversely(str + );
        printf("%c", *str);
    }
}

2.定义一个函数求字符串的长度,要求该函数体内不能声明任何变量。

 C++ Code 
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]的更多相关文章

  1. 九度OJ 1511 从尾到头打印链表

    题目地址:http://ac.jobdu.com/problem.php?pid=1511 题目描述: 输入一个链表,从尾到头打印链表每个节点的值. 输入: 每个输入文件仅包含一组测试样例. 每一组测 ...

  2. [Jobdu] 题目1511:从尾到头打印链表——单链表的倒置输出

    // ListNode typedef struct LNode { int key; struct LNode *next; }LNode;   分析:这是一道很有意思的面试题,此题以及此题的变体经 ...

  3. 从尾到头打印链表(C++和Python 实现)

    (说明:本博客中的题目.题目详细说明及参考代码均摘自 “何海涛<剑指Offer:名企面试官精讲典型编程题>2012年”) 题目 输入一个链表的头结点, 从尾到头反过来打印出每个结点的值. ...

  4. 九度oj题目1511:从尾到头打印链表

    题目1511:从尾到头打印链表 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:6010 解决:1805 题目描述: 输入一个链表,从尾到头打印链表每个节点的值. 输入: 每个输入文件仅包 ...

  5. 【剑指Offer面试编程题】题目1511:从尾到头打印链表--九度OJ

    题目描述: 输入一个链表,从尾到头打印链表每个节点的值. 输入: 每个输入文件仅包含一组测试样例. 每一组测试案例包含多行,每行一个大于0的整数,代表一个链表的节点.第一行是链表第一个节点的值,依次类 ...

  6. 【剑指Offer】06. 从尾到头打印链表 解题报告(Java & python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 解题方法 栈 递归 数组 日期 题目地址:https://leetcode ...

  7. 剑指Offer面试题:4.从尾到头打印链表

    一.题目:从尾到头打印链表 题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值. 到解决这个问题肯定要遍历链表.遍历的顺序是从头到尾的顺序,可输出的顺序却是从尾到头.也就是说第一个遍历到的结 ...

  8. 剑指Offer 从尾到头打印链表

    题目描述 输入一个链表,从尾到头打印链表每个节点的值. 输入描述: 输入为链表的表头 输出描述: 输出为需要打印的“新链表”的表头 思路: 用容器vector,递归到最后一个元素,push_back到 ...

  9. offer--链表反转和从尾到头打印链表

    这个是高频的面试题,今天总结了一些.反转链表用三个指针实现,返回新链表的头节点:而从尾到头打印,应用栈实现,返回vector整个链表. //题目描述 // //输入一个链表,反转链表后,输出链表的所有 ...

随机推荐

  1. if转换switch的小技巧

    class Program { static void Main(string[] args) { /* 对学员的结业考试成绩评测(用switch) * 成绩>=90……A * 90>成绩 ...

  2. 图解Android - System Service 概论 和 Android GUI 系统

    通过 图解Android - Binder 和 Service 一文中,我们已经分析了Binder 和 Service的工作原理.接下来,我们来简要分析Android 系统里面都有哪些重要的Servi ...

  3. 从svn服务器自动同步到另一台服务器

    需求场景 A commit B post-commit C (workstation) --------------> (svn server) ---------------------> ...

  4. BZOJ-3524 Couriers 可持久化线段树

    可持久化线段树,其实就是类主席树了.. 3524: [Poi2014]Couriers Time Limit: 20 Sec Memory Limit: 128 MB Submit: 1124 Sol ...

  5. LFI、RFI、PHP封装协议安全问题学习

    本文希望分享一些本地文件包含.远程文件包含.PHP的封装协议(伪协议)中可能包含的漏洞 相关学习资料 http://www.ibm.com/developerworks/cn/java/j-lo-lo ...

  6. cowboy-高性能简洁的erlang版web框架

    那么Cowboy是什么呢? Cowboy is a small, fast and modular HTTP server written in Erlang. 其定位非常明确: Cowboy aim ...

  7. javascript显示实时时间

    <html> <script language=Javascript> function time(){ //获得显示时间的div t_div = document.getEl ...

  8. groovy-保留字

    groovy的保留字: abstractasassertbooleanbreakbytecasecatchcharclassconstcontinuedefdefaultdodoubleelseenu ...

  9. HD2157How many wasy??(十大矩阵问题之八 + 邻接矩阵的应用)

    How many ways?? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  10. ci 4.2

    超级对象 $this 当前的控制器对象 有很多属性 $this->load    装载器类的实例在systme/core/loader.php  里面有view方法 $obj = new CI_ ...