java递归栈_java-66-用递归颠倒一个栈。例如输入栈{1,2,3,4,5},1在栈顶。颠倒之后的栈为{5,4,3,2,1},5处在栈顶...

本文探讨了如何使用递归方式反转栈,虽然空间复杂度较高且存在额外开辟integer的问题,但重点在于递归策略。作者提供了Java代码示例并讨论了效率与递归应用的关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import java.util.Stack;

public class ReverseStackRecursive {

/**

* Q 66.颠倒栈。

* 题目:用递归颠倒一个栈。例如输入栈{1,2,3,4,5},1在栈顶。

* 颠倒之后的栈为{5,4,3,2,1},5处在栈顶。

*1. Pop the top element

*2. Reverse the remaining stack

*3. Add the top element to the bottom of the remaining stack

*/

public static void main(String[] args) {

ReverseStackRecursive r=new ReverseStackRecursive();

Stack stack=new Stack();

for(int i=0;i<10;i++){

stack.add(i);

}

r.printStack(stack);

r.reverseStack(stack);

r.printStack(stack);

}

public void reverseStack(Stack stack){

if(!stack.empty()){

Integer top=stack.pop();

reverseStack(stack);

addToBottom(stack,top);

}

}

public void addToBottom(Stack stack,Integer ele){

if(stack.empty()){

stack.push(ele);

}else{

Integer top=stack.pop();

addToBottom(stack,ele);//important

stack.push(top);

}

}

public void printStack(Stack stack){

/*

while(!stack.empty()){

System.out.print(stack.pop()+",");

}

*/

//we don't remove the elements in the stack.

for(Integer x:stack){

System.out.print(x+",");

}

System.out.println();

}

}

0

0

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2012-03-08 20:41

浏览 4504

评论

4 楼

bylijinnan

2012-10-13

neyshule 写道

这样做貌似还不如直接把栈倒到一个queue或是list里面再往回填。。空间复杂度都是n啊,这个算法每次都要开辟一个integer,而且递归还更废不是吗?

从效率上来说的确是那样的

但这道题目是考察递归吧 题目明确规定是 用递归颠倒一个栈

2fd2d9c1d175d11752585fa9b76aba29.gif

3 楼

neyshule

2012-10-13

neyshule 写道

Integer top=stack.pop();

addToBottom(stack,ele);//important

stack.push(top);

代码都不对吧,你想一下别扭吗?

不好意思是对的,看错了。。

2 楼

neyshule

2012-10-13

Integer top=stack.pop();

addToBottom(stack,ele);//important

stack.push(top);

代码都不对吧,你想一下别扭吗?

1 楼

neyshule

2012-10-13

这样做貌似还不如直接把栈倒到一个queue或是list里面再往回填。。空间复杂度都是n啊,这个算法每次都要开辟一个integer,而且递归还更废不是吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值