每日一题 为了工作 2020 0305 第三题
Posted walxt
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每日一题 为了工作 2020 0305 第三题相关的知识,希望对你有一定的参考价值。
/**
* 问题:
* 如何仅适用递归函数和栈操作逆序一个栈
* 一个栈依次压入1、2、3、4、5,那么从栈顶到栈底分别为5、4、3、2、1。将这个栈转置后,
* 从栈顶到栈底为5、4、3、2、1,也就是实现了栈中元素的逆序,但是只可以通过递归函数来实现。
* 分析:
* 本题目考验查找操作和递归函数的设计,我们需要设计出两个递归函数。
* 函数一:将栈stack中的栈底元素返回并移除
* getAndRemoveLastElement()
* 函数二:逆序一个栈
* @author 雪瞳
*
*/
* 递归
递归需要满足两个条件:
1.反复调用自身。
2.有跳出反复调用的出口。
import java.util.Stack;
public class TransStack {
//将stack栈中的栈底元素返回并移除
public static int getAndRemoveLastElement(Stack<Integer> stack) {
//将栈顶元素输出并删除,将结果存在result中
int result = stack.pop();
if(stack.isEmpty()) {
return result;
}else {
//递归调用直到调用至可以获得result,即可以将栈底元素返回
int last = getAndRemoveLastElement(stack);
stack.push(result);
return last;
}
}
//逆序一个栈
public static void reverseStack(Stack<Integer> stack) {
if(stack.isEmpty()) {
return;
}
int i = getAndRemoveLastElement(stack);
//此时的stack和传入的形参之间相差一个栈底元素
reverseStack(stack);
stack.push(i);
}
public static void main(String[] args) {
//创建栈对象
Stack<Integer> stack = new Stack<>();
//向栈内添加元素
for(int i=1;i<=5;i++) {
stack.push(i);
}
TransStack test = new TransStack();
test.reverseStack(stack);
test.printCallStack(stack);
}
//打印栈中元素
public static void printCallStack(Stack<Integer> stack) {
if(stack.isEmpty()) {
return;
}else {
int result = stack.pop();
printCallStack(stack);
System.out.println(result);
}
}
}
以上是关于每日一题 为了工作 2020 0305 第三题的主要内容,如果未能解决你的问题,请参考以下文章