package com.my.suanfa;
import java.util.Stack;
/*
* 如何仅用递归函数和栈操作逆序一个栈
* 本题分两个步骤
* 第一步:利用递归拿到并移除栈中的最后一个元素
* 第二步:实现栈的逆序
* */
public class Solution01 {
//声明变量
private Stack<Integer> stack;
//初始化变量
public Solution01() {
stack = new Stack<Integer>();
}
//利用递归拿到并移除栈中的最后一个元素
public int getAndRemoveLastElement(Stack<Integer> stack) {
//用result来记录栈底元素,假设栈中只有一个元素,那么这个元素就是栈底元素
int result = stack.pop();
//如果栈为空,那么当前result记录的就是栈底元素
if(stack.isEmpty()) {
return result;
} else {
//如果栈不为空,则说明当前记录的不是栈底元素,则用last来记录下一个可能为栈底元素的元素
int last = getAndRemoveLastElement(stack);
//将上一次记录的不是栈底元素的元素重新入栈
stack.push(result);
//返回栈底元素
return last;
}
}
//利用递归翻转栈
public void reverse(Stack<Integer> stack) {
if(stack.isEmpty()) {
return;
}
//如果栈不为空,则i记录拿到的栈底元素
int i = getAndRemoveLastElement(stack);
//实现栈的翻转
reverse(stack);
//因为每次递归调用都会移除栈底元素,因此最后剩下的便是栈顶元素,依次将栈顶元素入栈实现栈的翻转
stack.push(i);
}
}
003-如何仅用递归函数和栈操作逆序一个栈
猜你喜欢
转载自blog.csdn.net/xiongmengyao/article/details/89489471
今日推荐
周排行