c++ - 递归反转堆栈

标签 c++ recursion stack reverse

我需要在 C++ 中使用递归来反转堆栈。我只能使用poppushreverseStack没有我发现的insertAtBottom等附加功能同时搜索 stackoverflow 和网络。

我试过:

void Stack::reverseStack(){
    if (isEmpty())
        return;
    else{
        int x;
        pop(x);
        reverseStack();
        push(x);
    }
}

但这会创建一个与原始堆栈完全相同的堆栈。

最佳答案

你需要实现一个函数来在底部插入一个项目,一个例子是

void Stack::insertAtBottom(int item) {
    if(isEmpty())
        push(item);
    else {
        int x;
        pop(x);
        insertAtBottom(item);
        push(x);
    }
}

此时您可以按如下方式实现反向操作

void Stack::reverseStack(){
    if (isEmpty())
        return;
    else{
        int x;
        pop(x);
        reverseStack();
        insertAtBottom(x);
    }
}

编辑: 如果他们需要在一个函数中,下面是两者的组合

void Stack::reverseStack(bool reverse=true,int item=0){
    if(reverse) {
        if (isEmpty())
            return;
        else{
            int x;
            pop(x);
            reverseStack();
            reverseStack(false,x);
        }
    } else {
        if(isEmpty())
            push(item);
        else {
            int x;
            pop(x);
            reverseStack(false,item);
            push(x);
        }
    }
}

干杯!

关于c++ - 递归反转堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29403927/

相关文章:

javascript - 当我们需要返回一个值时,为什么我们在递归中需要 "return"?

c - 从输入参数声明自动变量的数组大小

c - 我的代码有什么问题吗?

c++ - C++ 中的 KMP 算法实现给出运行时错误

c++ - 注意: ‘Entity_c::Entity_c(const Entity_c&)’ is implicitly deleted because the default definition would be ill-formed:

c++ - 数值转换

c++ - 编译代码太快会出错

java - 阶乘递归

file - 在 Kotlin 中递归列出文件

c++ - 骑士之旅将数组传递到链表等等