java递归栈_java-66-用递归颠倒一个栈。例如输入栈{1,2,3,4,5},1在栈顶。颠倒之后的栈为{5,4,3,2,1},5处在栈顶...
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
踩
分享到:
2012-03-08 20:41
瀏覽 4504
評論
4 樓
bylijinnan
2012-10-13
neyshule 寫道
這樣做貌似還不如直接把棧倒到一個queue或是list里面再往回填。。空間復(fù)雜度都是n啊,這個算法每次都要開辟一個integer,而且遞歸還更廢不是嗎?
從效率上來說的確是那樣的
但這道題目是考察遞歸吧 題目明確規(guī)定是 用遞歸顛倒一個棧
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里面再往回填。。空間復(fù)雜度都是n啊,這個算法每次都要開辟一個integer,而且遞歸還更廢不是嗎?
總結(jié)
以上是生活随笔為你收集整理的java递归栈_java-66-用递归颠倒一个栈。例如输入栈{1,2,3,4,5},1在栈顶。颠倒之后的栈为{5,4,3,2,1},5处在栈顶...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 序列二次规划_最优控制与规划
- 下一篇: R 基础入门(2)