如何僅用遞迴函式和棧操作逆序一個棧(詳解版)
阿新 • • 發佈:2019-01-28
import java.util.Stack; public class ReverseStack { /** * 1、首先,取出棧頂元素 * 2、然後求剩下元素的最後一個元素 * 3、最後將棧頂元素放回 * 其中第二步為遞迴呼叫,遞迴終止條件是棧中只有一個元素,此時直接返回棧頂即可得到最後一個元素 */ public static int getAndRemoveLastElement(Stack<Integer> stack){ int res = stack.pop(); if(stack.isEmpty()){ return res; } int last = getAndRemoveLastElement(stack); stack.add(res); return last; } /** * 1、取出並刪除棧低元素 * 2、翻轉剩下的元素 * 3、再將之前的棧低元素壓回棧頂 * 其中第二步為遞迴呼叫,遞迴終止條件是棧為空 */ public static void reverse(Stack<Integer> stack){ if(stack.isEmpty()) return; int i = getAndRemoveLastElement(stack); reverse(stack); stack.add(i); } //測試程式碼 public static void main(String[] args) { Stack<Integer> stack = new Stack<Integer>(); stack.add(3); stack.add(1); stack.add(2); reverse(stack); System.out.println(stack.pop()); System.out.println(stack.pop()); System.out.println(stack.pop()); } }