用遞迴反轉棧(Java實現
阿新 • • 發佈:2019-01-01
用遞迴來反轉棧
最開始的想法是一個遞迴函式解決,然後仔細想想不行
解法:
一個遞迴函式返回棧的棧底元素並將之移除
另一個遞迴函式進行遞迴壓入得到的資料
程式碼:
/** * 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();} }