zoukankan      html  css  js  c++  java
  • 前端常见算法面试题之

    题目描述

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

    实现思路

    前端工程师看到这个题目,直接想到的就是,写个while循环来遍历链表,在循环中把节点的值存储在数组中,最后在把数组倒序后,遍历数组打印每个值

    如果这个题目这么简单,面试官也就不考了

    如果面试官提要求说,不许使用数组的任何方法,你会怎么解决?

    由于是链表,肯定要遍历。遍历的顺序是从头到尾,可输出的顺序却是从尾到头。

    也就是先拿到的数据,最后一个输出。最后拿到的数据,第一个输出。有没有感觉跟栈的定义很像?栈就是“后进先出”,题目的要求也是。

    而递归本质就是一个栈结构,所以我们用递归来实现:每次遍历时,先输出后面的节点,在输出当前节点

    代码实现

    function printListFromTailToHead(head) {
      if (head.next) {
        printListFromTailToHead(head.next);
      }
    
      console.log(head.val);
    }
    

    代码看起来很清爽,但是递归有个问题,当参数很大时,会导致循环调用层级很深,有可能导致调用栈溢出。后续再讨论如何优化。

  • 相关阅读:
    JAVA-复数计算器
    第十三周总结
    java多线程
    写作的意义
    mysql删除有外键表数据
    Linux firewall防火墙设置
    linux安装ftp
    SELECT list is not in GROUP BY clause and contains nonaggregated
    primordials is not defined
    maven手动添加jar包
  • 原文地址:https://www.cnblogs.com/wuxiaoxiong/p/9879174.html
Copyright © 2011-2022 走看看