题目描述

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

实现思路

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

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

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

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

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

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

代码实现

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

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

前端常见算法面试题之 - 从尾到头打印链表[JavaScript解法]的更多相关文章

  1. 【剑指offer】面试题 6. 从尾到头打印链表

    面试题 6. 从尾到头打印链表 NowCoder 题目描述 输入一个链表的头结点,从尾到头反过来打印出每个结点的值. Java 实现 ListNode Class class ListNode { i ...

  2. 剑指offer-面试题5.从尾到头打印链表

    题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值. 刚看到这道题的小伙伴可能就会想,这还不简单,将链表反转输出. 但是这种情况破坏了链表的结构. 如果面试官要求不破坏链表结构呢,这时候我们 ...

  3. 剑指offer_面试题5_从尾到头打印链表(栈和递归实现)

    题目:输入一个链表的头结点,从尾到头反过来打印出每一个节点的值 考察 单链表操作.栈.递归等概念. 理解:要实现单链表的输出,那么就须要遍历.遍历的顺序是从头到尾.而节点输出的顺序是从尾到头.因此,先 ...

  4. 《剑指offer》面试题5—从尾到头打印链表

    重要思路: 这个问题肯定要遍历链表,遍历链表的顺序是从头到尾,而要输出的顺序却是从尾到头,典型的“后进先出”,可以用栈实现. 注意stl栈的使用,遍历stack的方法. #include <io ...

  5. 【剑指Offer】面试题06.从尾到头打印链表

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

  6. 《剑指offer》面试题06. 从尾到头打印链表

    问题描述 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回). 示例 1: 输入:head = [1,3,2] 输出:[2,3,1] 限制: 0 <= 链表长度 <= 10 ...

  7. 前端常见算法面试题之 - 二维数组中的查找[JavaScript解法]

    --------------------- 作者:吴潇雄 来源:CSDN 原文:https://blog.csdn.net/weixin_43439741/article/details/835118 ...

  8. 前端常见算法面试题之 - 重建二叉树[JavaScript解法]

    题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列[1,2,4,7,3,5,6,8],和中序遍历序列[4,7 ...

  9. 剑指Offer:面试题5——从尾到头打印链表(java实现)

    问题描述:输入一个链表的头结点,从尾巴到头反过来打印出每个结点的值. 首先定义链表结点 public class ListNode { int val; ListNode next = null; L ...

随机推荐

  1. JS相关知识点总结

    一.获取元素方法 1.document.getElementById("元素id号"); 可以使用内置对象document上的getElementById方法来获取页面上设置了id ...

  2. SGU---103 最短路变形

    题目链接: https://cn.vjudge.net/problem/SGU-103#author=ECUST_FZL 题目大意: Dingiville 城市的交通规则非常奇怪,城市公路通过路口相连 ...

  3. Day4 数组

    双重for循环 外循环控制行,内循环控制列. //乘法表 ; i <= ; i++) { ; j <= i ;j++) { System.out.print(j+"*" ...

  4. swoole_table应用类

    <?php/* Redis可真能坑爷,原先的设计用redis保存临时数据,可到了实际应用(实际上也就是几十个人同时用),总是出现莫名其妙的问题,最常见的就是读不出数据来,调试了好多天,那问题还是 ...

  5. mongodb启动与运用

    在操作前需要启动mongodb数据库服务 1.首先打开dos窗口,然后选择路径到你的安装路径下的bin目录(我的路径是的D:mongo\mongodb\bin) 2.然后输入启动命令(D:mongo\ ...

  6. Kafka设计解析(二)Kafka High Availability (上)

    转载自 技术世界,原文链接 Kafka设计解析(二)- Kafka High Availability (上) Kafka从0.8版本开始提供High Availability机制,从而提高了系统可用 ...

  7. Spring源码分析(十五)获取单例

    本文结合<Spring源码深度解析>来分析Spring 5.0.6版本的源代码.若有描述错误之处,欢迎指正. 之前我们讲解了从缓存中获取单例的过程,那么,如果缓存中不存在已经加载的单例be ...

  8. PAT乙级1006

    1006 换个格式输出整数 (15 分)   让我们用字母 B 来表示“百”.字母 S 表示“十”,用 12...n 来表示不为零的个位数字 n(<10),换个格式来输出任一个不超过 3 位的正 ...

  9. 【CSS3】特殊的属性归纳(二)

    这篇是看到博友 酷赛瑞 整理的文章才发现还有这么多有用的css3属性可以用. 附上链接:http://www.cnblogs.com/cosiray/archive/2012/12/06/280477 ...

  10. 以登录实现理解Servlet+jsp+JavaBean开发

    写在前面:菜鸟拙见,望请纠正 学过servlet的都知道,书本上一直说servlet一直作为控制器使用,它不实现view层,也不做具体的事务处理,那servlet到底是干什么的哪?怎么合理的用它呐?? ...