1. 程式人生 > 其它 >給你一個棧,不使用額外的資料結構 ,只能使用遞迴函式,逆序這個棧。

給你一個棧,不使用額外的資料結構 ,只能使用遞迴函式,逆序這個棧。

技術標籤:資料結構與演算法資料結構遞迴演算法

問題:給你一個棧,不使用額外的資料結構 ,只能使用遞迴函式,逆序這個棧。

思路:
1.定義一個函式getLastElement得到當前棧的棧底元素
2.定義一個函式reverseStack,儲存當前棧的棧底元素,並把彈出棧底元素的棧傳入reverseStack繼續遞迴呼叫,直到棧為空返回,把每一層的i壓入棧中就實現了棧的逆序。
程式碼實現:

import java.util.Stack;

public class ReverseStack {
    public static void main(String[] args) {
        Stack<
Integer>
stack = new Stack<>(); stack.push(1); stack.push(2); stack.push(3); reverseStack(stack); System.out.println(stack); } public static void reverseStack(Stack<Integer> stack){ if(stack.isEmpty()){ return; }
else{ //使用i儲存這個棧底元素 int i=getLastElement(stack); //將彈出棧底元素後的棧繼續遞迴直到棧為空 reverseStack(stack); //將儲存的i壓入棧中 stack.push(i); } } //將stack的棧頂元素彈出並返回 public static int getLastElement(Stack<Integer> stack){ int
temp=stack.pop(); //1.從棧頂彈出一個元素用temp儲存 if(stack.isEmpty()){ //2.如果這個時候棧為空,說明temp是最後一個元素 return temp; //直接返回 }else{ //3.如果不是棧頂元素,遞迴 last用來接收棧頂元素 int last=getLastElement(stack); stack.push(temp); //把原來彈出的temp壓回棧中 return last; //把last向上返回 } } }