仅用递归函数和栈操作逆序一个栈[c++]

【题目】
一个栈依次压入1、2、3、4、5,那么从栈顶到栈底分别为5、4、3、2、1。将这个栈转置后,从栈顶到栈底为1、2、3、4、5,也就是实现栈中元素的逆序,但是只能用递归函数来实现,不能用其他数据结构。

  个人感觉这个题目出的相当操蛋,先不说用这种方式来实现逆序本身就效率极低,这个题目也没有说的足够清楚,比如我就花了很多时间在思考如何仅用一个递归函数来实现这个算法,如果不看答案,很难想得到用2个递归函数,至少在想到的时候也会担心是否会违规,因为本身不用额外的数据结构给人的感觉就是尽量节约开支。
  操蛋的代码如下:

#include <iostream>
#include <stack>
#include <assert.h>
using namespace std;

template<class T>
T GetAndRemoveLast(stack<T>& stack) {
    T val = stack.top();
    stack.pop();
    if (stack.empty())  
        return val;
    T last = GetAndRemoveLast(stack);
    stack.push(val);
    return last;
}
template<class T>
void  reverseStack(stack<T>& stack) {
    if (stack.empty())
        return;
    T lastVal = GetAndRemoveLast(stack);
    reverseStack(stack);
    stack.push(lastVal);
}

int main() {
    stack<int> stack;
    stack.push(0);
    stack.push(1);
    stack.push(2);

    reverseStack(stack);
    int size = stack.size();

    for (int i = 0; i < size;++i) {
        cout << stack.top() << "\t";
        stack.pop();
    }
    cout << endl;
    system("pause");

    return 0;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容