要求:
一个栈依次压入1、2、3、4、5,即从栈顶到栈底分别为5、4、3、2、1。将这个栈转置之后,从栈顶到栈底为1、2、3、4、5,也就是完成栈的逆序。
只能用递归函数来实现,不能使用其他的数据结构。
思考:
我们可以设计两个递归函数,一个保证每次返回的是栈底的数,另外一个就是对栈进行反转。
实验代码:
<pre name="code" class="java">package algorithm_3;
import java.util.*;
public class algorithm_3 {
public static int getAndRemoveLastElement(Stack<Integer> stack){
int result = stack.pop();
if(stack.isEmpty()){
return result;
}
else{
int last = getAndRemoveLastElement(stack);
stack.push(result);
return last;
}
}
public static void reverse(Stack<Integer> stack){
if(stack.isEmpty()){
return;
}
int i = getAndRemoveLastElement(stack);
reverse(stack);
stack.push(i);
}
public static void main(String[] args){
Stack<Integer> abc;
abc = new Stack<Integer>();
for(int i = 1; i<4 ; i++){
abc.push(i);
System.out.printf("I push %d in abc\n",i);
}
reverse(abc);
System.out.printf("Changed...\n");
for(int i = 1; i<4;i++)
{System.out.printf("Stack abc[%d] is %d\r",i,abc.pop());
}
}
}
测试结果: