题解 | #用递归函数和栈逆序一个栈#
用递归函数和栈逆序一个栈
https://www.nowcoder.com/practice/1de82c89cc0e43e9aa6ee8243f4dbefd
import java.util.*; public class Main { public static void main(String args[]) { Scanner sc = new Scanner(System.in); Stack<Integer> s = new Stack<Integer>(); int n = sc.nextInt(); for(int i = 0; i < n; i++) { int t = sc.nextInt(); s.push(t); } reverseStack(s); for(int i = 0; i < n- 1; i++) { int t = s.pop(); System.out.print(t + " "); } System.out.print(s.pop()); } // 得到并且删除栈底元素的递归函数 public static int getAndDeleteLastElement(Stack<Integer> s) { int re = s.pop(); if(s.isEmpty()) { return re; } else { int last = getAndDeleteLastElement(s); s.push(re); return last; } } public static void reverseStack(Stack<Integer> s) { if(s.isEmpty()) return; int temp = getAndDeleteLastElement(s); reverseStack(s); s.push(temp); } }
需要设计两个递归函数
一个递归函数实现返回并去除栈底元素
另一个递归函数实现逆转栈:每次调用上一个函数获取栈底元素并在本函数返回将其压入栈中
利用两个递归函数+栈操作实现栈的逆序,一个递归函数负责取栈底元素,另一个递归函数负责重新压入
#算法题#