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个相互关联的概念的理解
  • 相关阅读:
    html 时间区间选择功能
    Django 【settings】数据库设置
    Django forms 定制form字段
    避免js全局变量污染的方法
    js获取路由
    采用遍历的方法获取字符串a在字符串b中的位置
    vue 学习笔记
    Promise
    js常用JSON数据操作
    js 数组遍历方式
  • 原文地址:https://www.cnblogs.com/ovs98/p/9872006.html
Copyright © 2011-2022 走看看