003-如何仅用递归函数和栈操作逆序一个栈

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);
		}
		
}

猜你喜欢

转载自blog.csdn.net/xiongmengyao/article/details/89489471
今日推荐