From 9a4d2d388f150b4cce0fc94370724a413cbf5b49 Mon Sep 17 00:00:00 2001 From: LouisFonda Date: Fri, 7 Mar 2025 20:25:12 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=80=86=E5=BA=8F=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E6=A0=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- list/index.js | 2 +- recursion/recursion.md | 3 +++ recursion/逆序一个栈.js | 35 +++++++++++++++++++++++++++++++++++ 3 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 recursion/recursion.md create mode 100644 recursion/逆序一个栈.js diff --git a/list/index.js b/list/index.js index 5f2152f..87e2303 100644 --- a/list/index.js +++ b/list/index.js @@ -1 +1 @@ -export * from './link-list.js' \ No newline at end of file +export * from './link-list.js'; diff --git a/recursion/recursion.md b/recursion/recursion.md new file mode 100644 index 0000000..c3bc5cb --- /dev/null +++ b/recursion/recursion.md @@ -0,0 +1,3 @@ +# 递归 + +此目录存放了常用递归思路,以及一些解决方案 diff --git a/recursion/逆序一个栈.js b/recursion/逆序一个栈.js new file mode 100644 index 0000000..e84d894 --- /dev/null +++ b/recursion/逆序一个栈.js @@ -0,0 +1,35 @@ +import Stack from '../stack/index.js'; + +/** + * + * @param {Stack} stack 需要处理的栈 + * 思路:我们首先需要有一个把栈底元素弹出的方法,当获取栈底元素之后,我们只需把剩余的元素逆序,再把这个 + * 栈底元素插入栈顶即可。 + */ +function reverse(stack) { + if (stack.isEmpty()) return; + const last = bottomOut(stack); // 弹出栈的底部元素 + reverse(stack); + stack.push(last); +} + +/** + * + * @param {Stack} stack - 需要处理的栈 + * @description 将一个栈的底部元素弹出 + * @return number + */ +function bottomOut(stack) { + const ans = stack.pop(); + if (stack.isEmpty()) { + return ans; + } + const last = bottomOut(stack); + stack.push(ans); + return last; +} + +const stack = new Stack([1, 2, 3, 4, 5, 6, 7]); // 创建一个栈,栈顶元素为5 + +reverse(stack); +stack.print();