使用递归逆序一个栈 发表于 2016-11-16 更新于 2022-11-11 分类于 数据结构 题目如何仅用递归函数和栈逆序一个栈 思路递归函数一,将 stack 栈底的元素返回并且移除12345678910111213141516171819202122/** * 获取栈底元素 * * @param stack 传入的栈 * @param <E> 返回的元素类型 * @return 栈底元素 */private static <E> E getAndRemoveLastElement(Stack<E> stack) { E result = stack.pop(); if (stack.isEmpty()) { return result; } else { E last = getAndRemoveLastElement(stack); stack.push(result); return last; }} 递归函数二,逆序一个栈,会调用到上面提到的 getAndRemoveLastElement 方法1234567891011121314151617181920/** * 逆序一个栈 * * @param stack 被操作的栈 * @param <E> 栈中元素类型 */public static <E> void reverse(Stack<E> stack) { if (stack.isEmpty()) { return; } E element = getAndRemoveLastElement(stack); reverse(stack); stack.push(element);} 测试123456789101112131415public class Main { public static void main(String[] args) { Stack<Integer> testStack = new Stack<>(); for (int i = 1; i <= 5; i++) { testStack.push(i); } StackReverseUtil.reverse(testStack); }}