給你一個棧,不使用額外的資料結構 ,只能使用遞迴函式,逆序這個棧。
阿新 • • 發佈:2021-02-08
問題:給你一個棧,不使用額外的資料結構 ,只能使用遞迴函式,逆序這個棧。
思路:
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向上返回
}
}
}