zoukankan      html  css  js  c++  java
  • 面试题6:从尾到头打印链表

    一.题目

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

    二.思路

    本题有两种方式解决:

    1. 递归

    但需要注意的是:当链表非常长的时候,就会导致函数调用的层级很深,从而有可能导致函数调用栈溢出。显然用栈基于循环实现代码的鲁棒性更好一些。

    三.代码

    1. 栈实现
    void PrintListReversingly_Iteratively(ListNode* pHead){
        std::stack<ListNode> nodes;
    
        ListNode* pNode = pHead;
        while(pNode != nullptr){
            nodes.push(pNode);
            pNode = pNode->m_pNext;
        }
    
        while(!nodes.empty()){
            pNode = nodes.top();
            printf("%d	",pNode->m_nValue);
            nodes.pop();
        }
    
    }

        2. 递归实现

    void PrintListReversingly_Iteratively(ListNode* pHead){
        
        ListNode* pNode = pHead;
    
        if(pNode != nullptr){
            if(pNode->m_pNext != nullptr)
                PrintListReversingly_Iteratively(pNode->m_pNext);
    
            printf("%d	",pNode->m_nValue);
        }
    }

    四.本题考点

    1. 考查应聘者对单向链表的理解和编程能力
    2. 考查应聘者对循环、递归和栈3个相互关联的概念的理解
  • 相关阅读:
    合并n个链表
    合并2个链表
    删除链表中的倒数第n个元素
    判断字符串是否回文字符串
    回文链表
    反转链表
    反转链表2
    冒泡排序法
    编译datax(3.x版本)踩的坑,记录修改记录
    Python基本知识(6)——集合
  • 原文地址:https://www.cnblogs.com/ovs98/p/9872006.html
Copyright © 2011-2022 走看看