给定一个由N 个元素组成的堆栈,任务是使用一个额外的堆栈来反转堆栈。
例子:
Input: stack = {1, 2, 3, 4, 5}
Output:
1
2
3
4
5
Explanation:
Input Stack:
5
4
3
2
1
Reversed Stack:
1
2
3
4
5
Input: stack = {1, 3, 5, 4, 2}
Output:
1
3
5
4
2
处理方法:按照以下步骤解决问题:
- 初始化一个空栈。
- 弹出给定堆栈 S 的顶部元素并将其存储在一个临时变量中。
- 将给定堆栈的所有元素转移到上面初始化的堆栈。
- 将临时变量推入原始堆栈。
- 将新堆栈中存在的所有元素转移到原始堆栈中。
下面是上述方法的实现。
C++
// C++ program to reverse a stack
// by using an extra stack
#include
using namespace std;
// Function to transfer elements of
// the stack s1 to the stack s2
void transfer(stack& s1,
stack& s2, int n)
{
for (int i = 0; i < n; i++) {
// Store the top element
// in a temporary variable
int temp = s1.top();
// Pop out of the stack
s1.pop();
// Push it into s2
s2.push(temp);
}
}
// Function to reverse a stack using another stack
void reverse_stack_by_using_extra_stack(stack& s,
int n)
{
stack s2;
for (int i = 0; i < n; i++) {
// Store the top element
// of the given stack
int x = s.top();
// Pop that element
// out of the stack
s.pop();
transfer(s, s2, n - i - 1);
s.push(x);
transfer(s2, s, n - i - 1);
}
}
// Driver Code
int main()
{
int n = 5;
stack s;
s.push(1);
s.push(2);
s.push(3);
s.push(4);
s.push(5);
reverse_stack_by_using_extra_stack(s, n);
for (int i = 0; i < n; i++) {
cout << s.top() << " ";
s.pop();
}
return 0;
}
Java
// Java program to reverse a stack
// by using an extra stack
import java.io.*;
import java.util.*;
class GFG{
// Function to transfer elements of
// the stack s1 to the stack s2
static void transfer(Stack s1,
Stack s2, int n)
{
for(int i = 0; i < n; i++)
{
// Store the top element
// in a temporary variable
int temp = s1.peek();
// Pop out of the stack
s1.pop();
// Push it into s2
s2.push(temp);
}
}
// Function to reverse a stack using another stack
static void reverse_stack_by_using_extra_stack(Stack s,
int n)
{
Stack s2 = new Stack();
for(int i = 0; i < n; i++)
{
// Store the top element
// of the given stack
int x = s.peek();
// Pop that element
// out of the stack
s.pop();
transfer(s, s2, n - i - 1);
s.push(x);
transfer(s2, s, n - i - 1);
}
}
// Driver Code
public static void main(String[] args)
{
int n = 5;
Stack s = new Stack();
s.push(1);
s.push(2);
s.push(3);
s.push(4);
s.push(5);
reverse_stack_by_using_extra_stack(s, n);
for(int i = 0; i < n; i++)
{
System.out.print(s.peek() + " ");
s.pop();
}
}
}
// This code is contributed by Dharanendra L V.
Python3
# Python3 program to reverse a stack
# by using an extra stack
# Function to transfer elements of
# the stack s1 to the stack s2
def transfer(s1, s2, n):
for i in range(n):
# Store the top element
# in a temporary variable
temp = s1[-1]
# Pop out of the stack
s1.pop()
# Push it into s2
s2.append(temp)
# Function to reverse a stack using another stack
def reverse_stack_by_using_extra_stack(s, n):
s2 = []
for i in range(n):
# Store the top element
# of the given stack
x = s[-1]
# Pop that element
# out of the stack
s.pop()
transfer(s, s2, n - i - 1)
s.append(x)
transfer(s2, s, n - i - 1)
# Driver Code
if __name__ == "__main__":
n = 5
s = []
s.append(1)
s.append(2)
s.append(3)
s.append(4)
s.append(5)
reverse_stack_by_using_extra_stack(s, n)
for i in range(n):
print(s[-1], end = " ")
s.pop()
# This code is contributed by ukasp
C#
// C# program to reverse a stack
// by using an extra stack
using System;
using System.Collections.Generic;
class GFG{
// Function to transfer elements of
// the stack s1 to the stack s2
static void transfer(Stack s1,
Stack s2, int n)
{
for (int i = 0; i < n; i++) {
// Store the top element
// in a temporary variable
int temp = s1.Peek();
// Pop out of the stack
s1.Pop();
// Push it into s2
s2.Push(temp);
}
}
// Function to reverse a stack using another stack
static void reverse_stack_by_using_extra_stack(Stack s,
int n)
{
Stack s2 = new Stack();
for (int i = 0; i < n; i++) {
// Store the top element
// of the given stack
int x = s.Peek();
// Pop that element
// out of the stack
s.Pop();
transfer(s, s2, n - i - 1);
s.Push(x);
transfer(s2, s, n - i - 1);
}
}
// Driver Code
public static void Main()
{
int n = 5;
Stack s = new Stack();
s.Push(1);
s.Push(2);
s.Push(3);
s.Push(4);
s.Push(5);
reverse_stack_by_using_extra_stack(s, n);
for (int i = 0; i < n; i++) {
Console.Write(s.Peek() + " ");
s.Pop();
}
}
}
// This code is contributed by SURENDRA_GANGWAR.
Javascript
输出:
1 2 3 4 5
时间复杂度: O(N 2 )
辅助空间: O(N)
如果您想与行业专家一起参加直播课程,请参阅Geeks Classes Live