#include <iostream>
#include <stack>
#include <utility>
using namespace std;
template<typename STACK, typename T>
void pop(STACK&& stk, T&& val)
{
if(stk.size() != 0)
{
auto tmp = stk.top();
stk.pop();
pop(stk, std::forward<T>(val));
stk.push(tmp);
}
else
{
stk.push(std::forward<T>(val));
}
}
template<typename STACK>
void reverse(STACK&& stk)
{
if (stk.size() != 0)
{
auto tmp = stk.top();
stk.pop();
reverse(stk);
pop(stk, tmp);
}
}
int main()
{
stack<int> stk;
stk.push(1);
stk.push(2);
stk.push(3);
stk.push(4);
reverse(stk);
cout << stk.top() << endl;
stk.pop();
cout << stk.top() << endl;
stk.pop();
cout << stk.top() << endl;
stk.pop();
cout << stk.top() << endl;
stk.pop();
}
Sep 19, 2014
[leet] Reverse Stack without using extra memory
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.