使用递归反转栈

2025年3月17日 | 阅读 3 分钟

在这里,我们将使用递归来反转堆栈。我们不应该使用任何循环结构,如 for 循环、while 循环、do-while 循环等。我们应该使用递归方法来反转堆栈。

例如: 输入:s = [10, 20, 30, 40, 50]

输出:[50, 40, 30, 20, 10]

解释:当堆栈 s 被反转时,输出将是 [50, 40, 30, 20, 10]。

有各种方法可以使用递归来反转堆栈。反转堆栈最常见的方法是使用辅助堆栈。首先,我们将堆栈中的所有元素弹出并推入辅助堆栈。一旦所有元素都被推入辅助堆栈,它就包含反转顺序的元素,我们只需打印它们。但是,在这里,我们不会使用辅助堆栈。我们将使用递归方法来反转堆栈,其中递归意味着反复调用函数本身。

在递归方法中,我们首先从输入堆栈中弹出所有元素,并将所有弹出的项推入函数调用堆栈,直到堆栈变空。当堆栈变空时,所有项都将被推入堆栈。让我们通过一个例子来理解这种情况。

例如

输入堆栈 1, 2, 3, 4, 5

Reverse a stack using recursion

输出 5, 4, 3, 2, 1

解决方案: 首先,输入堆栈中的所有元素都被推入函数调用堆栈

步骤 1: 元素 5 被推入堆栈底部,如下所示

Reverse a stack using recursion

步骤 2: 元素 4 被推入堆栈底部,如下所示

Reverse a stack using recursion

步骤 3: 元素 3 被推入堆栈底部,如下所示

Reverse a stack using recursion

步骤 4: 元素 2 被推入堆栈底部,如下所示

Reverse a stack using recursion

步骤 5: 元素 1 被推入堆栈底部,如下所示

Reverse a stack using recursion

C 语言实现

输出

Reverse a stack using recursion