1. 程式人生 > >用遞迴反轉棧(Java實現

用遞迴反轉棧(Java實現

用遞迴來反轉棧

最開始的想法是一個遞迴函式解決,然後仔細想想不行

解法:

一個遞迴函式返回棧的棧底元素並將之移除

另一個遞迴函式進行遞迴壓入得到的資料

程式碼:

/**
 * By  returnZhang
 * 遞迴翻轉棧
 */
public class Reverse {

    private Stack<Integer> stack;
/**
     * 建構函式
     */
public Reverse(){
        stack=new Stack<>();
}

    //壓入函式
public void push(Integer num){
        stack
.push(num); } public Integer pop(){ return stack.pop(); } /** * 得到棧底值並移除 * * @return */ private Integer getLastValue(){ //獲取當前棧頂值 int value=stack.pop(); //終結條件 if(stack.isEmpty()){ return value; }else{ //遞迴 int last=getLastValue(); //重新壓入數值 stack
.push(value); return last; } } //通過遞迴重新把棧底值反轉壓入 public void reverseStack(){ //遞迴終結條件 if(stack.isEmpty()){ return; } int last=getLastValue();//通過遞迴函式獲取棧底值 reverseStack();//遞迴操作 stack.push(last);//一層一層壓入值 } public boolean isEmpty(){ return stack.isEmpty();
} }