JavaScript用递归方法实现颠倒栈的元素
程序员文章站
2022-04-27 17:13:29
...
先看一个面试题,题目如下:有一个栈,往里面一次压入1,2,3,4,5这几个元素,得到的结果为[1,2,3,4,5],现在只能用递归的方法,将栈里面的元素颠倒,得到的结果为[5,4,3,2,1]。要是没有题目要求的话,这个就比较简单了,直接arr.reverse()就可以解决问题,不过只能用递归就有意思了,菜鸟一般的我就得好好研究一番了。
动手分析
我们把栈[1, 2, 3, 4, 5]看成由两部分组成:栈顶元素1和剩下的部分[2, 3, 4, 5]。
如果我们能把[2, 3, 4, 5]颠倒过来,变成[5, 4, 3, 2],然后在把原来的栈顶元素1放到底部,那么就整个栈就颠倒过来了,变成[5, 4, 3, 2, 1]。
接下来我们需要考虑两件事情:一是如何把[2, 3, 4, 5]颠倒过来变成[5, 4, 3, 2]。我们只要把[2, 3, 4, 5]看成由两部分组成:栈顶元素2和剩下的部分[3, 4, 5]。
我们只要把[3, 4, 5]先颠倒过来变成[5, 4, 3],然后再把之前的栈顶元素2放到最底部,也就变成了[5, 4, 3, 2]。
至于怎么把[3, 4, 5]颠倒过来……很多读者可能都想到这就是递归。也就是每一次试图颠倒一个栈的时候,现在栈顶元素pop出来, 再颠倒剩下的元素组成的栈,最后把之前的栈顶元素放到剩下元素组成的栈的底部。递归结束的条件是剩下的栈已经空了
秀一波代码
//这个函数的作用是把栈中的元素展开 function reverseStack(arr){ if( arr.length != 0 ) { var topItem = arr.pop() reverseStack(arr) pushStack(arr, topItem) } return arr}//这个函数的作用是把函数进行颠倒 function pushStack(arr, item){ else{ console.log(arr) if(arr.length == 0){ arr.push(item) }
相关推荐:
以上就是JavaScript用递归方法实现颠倒栈的元素的详细内容,更多请关注其它相关文章!
下一篇: 理解 Python 装饰器看这一篇就够了
推荐阅读
-
用javascript实现页面打印的三种方法
-
JavaScript实现向select下拉框中添加和删除元素的方法
-
JavaScript实现父子dom同时绑定两个点击事件,一个用捕获,一个用冒泡时执行顺序的方法
-
JavaScript实现动态添加、移除元素或属性的方法分析
-
javascript过滤数组重复元素的实现方法
-
用Json实现PHP与JavaScript间数据交换的方法详解
-
JavaScript实现动态添加Form表单元素的方法示例
-
原生JavaScript来实现对dom元素class的操作方法(推荐)
-
JavaScript中递归实现的方法及其区别
-
用原生JavaScript实现jQuery的$.getJSON的解决方法