重造轮子 用递归函数和栈操作逆序一个栈

目标:仅使用递归与栈操作将栈逆序。
方法:有点利用回溯法的味道。在递归操作中做两次取栈顶元素的操作后,并将第一次取得的栈顶元素再入栈。这个操作可以将原栈中最顶部的元素压入栈底。当递归函数返回时,再将另一个取栈顶操作获得的元素压入栈。然后在对从栈顶到次栈底这一段元素调用上诉操作。

代码:

class Solution{
public:
	void reverseStack(stack<int>& s){//逆序栈
		if(s.empty())
			return;
		int len = s.size();
		while(len>1){//当栈内可逆序长度为1时,则栈已经完成逆序过程
			reverse(s,len);
			len--;
		}
		while(!s.empty()){//打印逆序后的栈,这里栈也变空了
		    cout<<s.top()<<endl;
			s.pop();
		}
	}
	void reverse(stack<int>& s,int len){
	    if(len == 1) return;
		int n,m;
	        n = s.top();//第一次取栈顶元素
                s.pop();//栈顶出栈
		m = s.top();//第二次取栈顶元素
		s.pop();//栈顶出栈
		s.push(n);//将第一次取栈顶操作得到的数压入栈
		reverse(s,len-1);//递归,长度减1
		s.push(m);//将第二次取栈顶操作得到的数压入栈
	}
};


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值