题目:一个栈依次压入1,2,3,4,5,那么从栈顶到栈底分别为:5,4,3,2,1。将这个栈转置后,从栈顶到栈底为1,2,3,4,5,也就是实现栈中元素的逆序,但是只能用递归函数来实现,不能用其他数据结构。
我自己的理解:
如上图,将左边的栈通过逆序转换为右边的栈,右边的栈最下面是3,因此最先要把3压进去,也就说明在从左边的栈中提取元素时,要最后提取到三,因此就说明是从栈底元素开始到栈顶元素依次进行遍历。但是对于左边来说,3在栈顶,1在栈底,和我们想要的顺序不同,因此这里还需要写一个递归。对于右边的栈来说,在压入第一个元素3的时候,要求栈为空,也就是意味着我们在对初始的左边栈进行数据提取时,应该采用pop而不是peek。
代码实现如下:
package text3;
import java.util.Stack;
public class class1 {
public class1() {
}
public static int getlast(Stack<Integer> stack) {
int result=stack.pop();
if(stack.empty()) {
return result;
}else {
int last=getlast(stack);
stack.push(result);
return last;
}
}
public static void reverse(Stack<Integer> stack) {
if(stack.empty()) {
return;
}
int a=getlast(stack);
reverse(stack);
stack.push(a);
}
}