`
caoruntao
  • 浏览: 480808 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

从尾到头输出链表

 
阅读更多

【转】http://zhedahht.blog.163.com/blog/static/2541117420079237185699/

 

题目:输入一个链表的头结点,从尾到头反过来输出每个结点的值。链表结点定义如下:

struct ListNode

{

      int       m_nKey;

      ListNode* m_pNext;

};

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

看到这道题后,第一反应是从头到尾输出比较简单。于是很自然地想到把链表中链接结点的指针反转过来,改变链表的方向。然后就可以从头到尾输出了。反转链表的算法详见本人面试题精选系列的第19,在此不再细述。但该方法需要额外的操作,应该还有更好的方法。

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

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

基于这样的思路,不难写出如下代码:

///////////////////////////////////////////////////////////////////////

// Print a list from end to beginning

// Input: pListHead - the head of list

///////////////////////////////////////////////////////////////////////

void PrintListReversely(ListNode* pListHead)

{

      if(pListHead != NULL)

      {

            // Print the next node first

            if (pListHead->m_pNext != NULL)

            {

                  PrintListReversely(pListHead->m_pNext);

            }

 

            // Print this node

            printf("%d", pListHead->m_nKey);

      }

}

扩展:该题还有两个常见的变体:

1.       从尾到头输出一个字符串;

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

分享到:
评论

相关推荐

    面试题6--从尾到头打印链表.c

    题目描述: 输入一个链表,从尾到头打印链表每个节点的值。 输入: 每个输入件仅包含一组测试样例。 每一组测试案例包含多行,每行一个大于...对应每个测试案例,以从尾到头的顺序输出链表每个节点的值,每个值占一行。

    4. 从尾到头打印链表1

    本问题探讨了如何从尾到头地打印链表,即逆序遍历链表并输出其元素值。 解法一采用了栈这一数据结构来实现。栈是一种后进先出(LIFO)的数据结构,适合用于解决此类问题。具体步骤如下: 1. 初始化一个空栈。 2. ...

    Trouvaille0198#Notes#剑指 Offer 06. 从尾到头打印链表1

    剑指 Offer 06. 从尾到头打印链表输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输出:[2,3,1]辅助栈// 辅助栈s

    js代码-链表(从尾到头打印链表)

    要从尾到头打印链表,一种直接的方法是先遍历整个链表,记录每个节点,然后反向输出。但是,这种方法在内存消耗上并不理想,因为它需要存储所有节点。另一种更高效的方法是使用两个指针,一个快指针每次移动两步,一...

    基于python实现从尾到头打印链表

    输入一个链表,按链表从尾到头的顺序返回一个ArrayList。 思路 遍历链表,把结构保存在list里面,然后把list逆序输出 代码 # -*- coding:utf-8 -*- # class ListNode: # def __init__(self, x): # self.val = x #...

    cpp代码-//从尾到头打印链表 //遍历链表的同时将节点值入栈,最后依次出栈

    这种问题通常出现在数据结构和算法的学习中,它要求我们不按照传统的顺序(从头到尾)而是逆序地输出链表的元素。在这里,我们可以通过辅助的数据结构——栈(stack)来实现这一目标。下面我们将详细讨论这个问题的...

    c++程序设计 南京理工大学

    同时,我们还需要编写一个TraverseBackwards函数,用于从尾到头输出链表中的所有节点。 五、依据姓名查找结点及修改结点数据的功能 在实现依据姓名查找结点及修改结点数据的功能时,我们需要编写一个FindByName...

    腾讯校园招聘C语言笔试题.docx

    题目要求从尾到头输出链表节点的值。这可以通过两种方法实现:递归和栈。递归方法是通过递归调用自身,每次处理当前节点的下一个节点,直到遍历到链表末尾,然后回溯打印节点值。栈方法则是将链表的所有节点压入栈...

    网易游戏2013研发工程师笔试面试卷.pdf

    要从尾到头输出链表,可以使用栈(先进后出)的数据结构,或者通过迭代或递归的方式来实现链表节点的逆序遍历。 6. 最大金币问题:这是一个概率模型构建与计算问题。需要建立概率模型来计算在给定策略下拿到最多...

    剑指offer题解

    如果要求反向打印,即从尾到头输出链表的元素,可以使用栈来实现。 解题思路如下: - 创建一个栈,遍历链表。 - 将遍历到的每个节点的值压入栈中。 - 最后栈顶到栈底的顺序即为链表节点值的反向顺序。 此方法的...

    PHP从尾到头打印链表实例讲解

    对于链表从尾到头打印的问题,可以采用递归方式,递归函数会持续调用自身直到达到链表的末尾(头节点),然后在回溯阶段依次打印节点值。 在提供的代码中,递归版本的`printListFromTailToHead`函数如下所示: ```...

    python实现从尾到头打印单链表操作示例

    然后调用`print_end_to_head`方法,从尾到头打印链表,输出结果为4, 3, 2, 1。 此外,注释中还提到了一种打印对象属性的方法,使用`obj.__dict__.items()`可以获取对象的所有属性及其值,通过列表推导式构建字符串...

    期中练习.doc

    3. **从尾到头输出链表并求和**:遍历链表,从尾结点开始,逐个访问结点,同时累计结点数据,最后返回累计结果。 4. **字符串比较**:编写一个程序,不使用strcmp函数比较两个字符串。可以通过逐字符比较,根据...

    程序员面试题精选100题.doc

    - **从尾到头输出链表**:可以通过递归的方式来实现。 - **不能被继承的类**:在面向对象编程中,有时需要阻止类被继承,可以使用私有继承等方式来实现。 - **在O(1)时间删除链表结点**:通过修改指针指向的方式实现...

    NoCodeNolife-cloud#leetcode-Practice-Questions#剑指 Offer 06. 从尾到头

    输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输出:[2,3,1]限制:0 链表长度 * Definiti

    链表的正序和逆序输出

    逆序输出链表则需要从尾节点到头节点打印节点的值。有多种方法可以实现这一操作,这里我们介绍两种常见方法: 1. **迭代法**:通过两个指针,一个指向当前节点,另一个指向前一个节点,从头到尾遍历链表,反转指针...

    双向循环链表(C++)

    5. **逆向输出**:从尾到头遍历链表并打印节点数据。 以下是链表类的一个可能实现: ```cpp class DoublyCircularLinkedList { private: Node* head; public: DoublyCircularLinkedList() : head(nullptr) {} ...

    双向链表操作

    这种结构使得双向链表支持双向遍历,即可以从头到尾或者从尾到头访问链表中的元素。 本文将详细介绍如何在双向链表上实现基本的操作,包括创建、查找、删除、反转以及输出等,并且通过具体的代码示例来解释每个功能...

    面试笔试真题(C++)-2017年牛客精华

    "面试笔试真题(C++)-2017年牛客精华" 从给定的文件信息中,我们可以总结出以下几个关键知识点: 1. C++中的继承:派生类对象可以访问基类成员...3. 从尾到头打印链表:输入一个链表,从尾到头打印链表每个节点的值。

Global site tag (gtag.js) - Google Analytics