-
Notifications
You must be signed in to change notification settings - Fork 1
/
23_3_reverse_a_stack.cpp
86 lines (75 loc) · 1.6 KB
/
23_3_reverse_a_stack.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include <iostream>
#include <stack>
using namespace std;
void insertAtBottom(stack<int> &st, int ele){
if(st.empty()){
st.push(ele);
return;
}
int topele=st.top();
st.pop();
insertAtBottom(st,ele);
st.push(topele);
}
void reverse(stack<int> &st){
if(st.empty()){
return;
}
int ele=st.top();
st.pop();
reverse(st);
insertAtBottom(st,ele);
}
/*
Elements temporarily gets saved in Call Stack, instead of creating a new stack.
reverse(1234)
ele=4
reverse(123)
ele=3
reverse(12)
ele=2
reverse(1)
ele=1
reverse()
insertAtBottom(,1)
return st=1
insertAtBottom(1,2)
topele=1
insertAtBottom(,2)
return st=2
return st=21
insertAtBottom(21,3)
topele=1
insertAtBottom(2,3)
topele=2
insertAtBottom(,3)
return st=3
return st=32
return st=321
insertAtBottom(321,4)
topele=1
insertAtBottom(32,4)
topele=2
insertAtbottom(3,4)
topele=3
insertAtBottom(,4)
return st=4
return st=43
return st=432
return st=4321
*/
int main()
{
stack<int> st;
st.push(1);
st.push(2);
st.push(3);
st.push(4);
reverse(st);
while(!st.empty()){
cout<<st.top()<<" ";
st.pop();
}
cout<<endl;
return 0;
}