前端常见算法面试题之 - 从尾到头打印链表[JavaScript解法]

题目描述

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

实现思路

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

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

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

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

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

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

代码实现

function printListFromTailToHead(head) {
  if (head.next) {
    printListFromTailToHead(head.next);
  }

  console.log(head.val);
}

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.把二元查找树转变成排序的双向链表 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。 要求不...
    曲终人散Li阅读 3,410评论 0 19
  • 本文是我自己在秋招复习时的读书笔记,整理的知识点,也是为了防止忘记,尊重劳动成果,转载注明出处哦!如果你也喜欢,那...
    波波波先森阅读 4,223评论 0 23
  • 初恋总是能留在记忆里很久,久到自己都以为忘了,却在不经意之间,风起云涌你。 菲尔毕业后就考到了镇上的高中上课,以往...
    鱼尾晒晒阅读 413评论 0 0
  • 经常要对大量文件和大量路径进行操作,这就依赖于os模块 OS命令:更改路径,脚本所在路径,现在脚本的路径 os.r...
    夏日春风阅读 122评论 0 0
  • 只知道寒冷的冬夜里你会将我抱在胸前 给我温暖,给我信心 遇见你 是我们的约定,是八百年前的约定 不知道 我会爱你多...
    海深深阅读 296评论 1 2