// ListNode
typedef struct LNode {
int key;
struct LNode *next;
}LNode;

 

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

看到这道题后,第一反应是从头到尾输出比较简单。然后经过分析,这道题有以下几种解决方法:

  1. 将链表中节点的指针反转过来,然后在从头到尾输出节点中的值

  2. 当要倒置输出值时,我们会想到用栈来实现。所以这种方法是,遍历链表节点中的值,依次入栈,最后弹栈输出

仔细分析这两种方法,解决问题都需要两步。方法一显然不是面试官想要的算法,而方法二需要维护一个额外的栈,在不借用STL容器时,实现起来比较麻烦,那么有没有一步到位的算法呢?

答案是肯定的,仔细分析第二种方法,需要用到栈来实现这个函数,而递归本质上就是一个栈结构。于是想到要用递归的思想来解决问题。下面贴出用递归实现的代码,这类问题要理解,并且能够运用这种递归思想来解决类似的问题:

 // given a head pointer, print key from the end to the beginning
void printListReversely(LNode *head) {
if (head) {
if (head->next)
printListReversely(head->next);
}
printf("%d ", head->key);
}

扩展:

  1. 给定一个未知长度的字符串,从尾到头输出一个字符窜(在不使用string.h文件中strlen函数的前提下)

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

 // print string reversely
void printStringReversely(const char *str) {
if (*str != '\0') {
if (*(str + ) != '\0')
printStringReversely(str + );
} else {
printf("\n");
return;
}
printf("%c", *str);
}
 // strlen implemented by recursion
int strlen(const char *str) {
if (*str == '\0')
return ;
else
return strlen(str + ) + ;
}

[Jobdu] 题目1511:从尾到头打印链表——单链表的倒置输出的更多相关文章

  1. 剑指Offer - 九度1511 - 从尾到头打印链表

    剑指Offer - 九度1511 - 从尾到头打印链表2013-11-29 21:08 题目描述: 输入一个链表,从尾到头打印链表每个节点的值. 输入: 每个输入文件仅包含一组测试样例.每一组测试案例 ...

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

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

  3. 【C++】面试题目:从尾到头打印链表

    通过<剑指offer 名企面试官精讲典型编程题>看到一道讲解链表的题目. 题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值 链表定义如下: typedef struct _NO ...

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

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

  5. 剑指offer【03】- 从尾到头打印链表(4种实现方法)

    题目:从尾到头打印链表 考点:链表 题目描述:输入一个链表,按链表值从尾到头的顺序返回一个ArrayList. 法一:ArrayList头插法 /** * public class ListNode ...

  6. JZ-003-从尾到头打印链表

    从尾到头打印链表 题目描述 输入一个链表,按链表从尾到头的顺序返回一个ArrayList. 题目链接: 从尾到头打印链表 代码 import java.util.ArrayList; /** * 标题 ...

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

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

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

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

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

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

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

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

随机推荐

  1. 线程中的异常处理——怪不得所有的语句,都用try catch包的严严实实,甚至每个小步骤还要单独包起来

    答案是:在线程中出现没处理的异常时,线程会自动终止. 以前刚看到别人的代码时候,十分惊讶,try catch几乎成了最主要的语句了,还以为是因为代码风格,或者更严谨一些的原因.到今天才明白,原来还不是 ...

  2. [Leetcode][Python]34: Search for a Range

    # -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 34: Search for a Rangehttps://oj.leetco ...

  3. css重置

    清除标签的默认样式 body{margin:0;}ul,ol{margin:0 auto;padding:0;}li{ list-style:none;}dl{margin:0;}dd{margin: ...

  4. Android中adb push和adb install的使用区别

    Android中adb push和adb install的使用区别  转载 本篇文章由史迎春(@三俗小女子)投稿.转载请注明原文地址. 在Android实际开发中,经常会使用adb命令,安装应用程序可 ...

  5. office2010安装出错,windows installer服务不能更新一个或多个受保护的windows文件

    转自:http://www.08lr.cn/article/1985.html office2010安装过程中出现如下图错误:windows installer 服务不能更新一个或多个受保护的wind ...

  6. 关于Oracle将小于1的数字to_char后丢掉0的解决办法

    SQL代码如下: select rtrim(to_char(0.11, 'fm9990.99'), '.') from dual;其中0.11为需要to_char的数字fm去掉字符串前面的空格9990 ...

  7. 5分种让你了解javascript异步编程的前世今生,从onclick到await/async

      javascript与异步编程 为了避免资源管理等复杂性的问题,javascript被设计为单线程的语言,即使有了html5 worker,也不能直接访问dom. javascript 设计之初是 ...

  8. Spark源码学习3

    转自:http://www.cnblogs.com/hseagle/p/3673132.html 一.概要 本篇主要阐述在TaskRunner中执行的task其业务逻辑是如何被调用到的,另外试图讲清楚 ...

  9. 批量修改文件名java

    package test0715; import java.io.File; public class FileRename {public static void main(String[] arg ...

  10. poj 3270 置换

    poj 置换的应用 黑书原题P248 /** 题意: 给定序列, 将其按升序排列, 每次交换的代价是两个数之和, 问代价最小是多少 思路:1.对于同一个循环节之内的,肯定是最小的与别的交换代价最小 2 ...