劍指OFFER--用兩個棧實現隊列

        棧 : 先進後出!java

        隊列 : 先進先出!
node

        那麼怎麼用棧來實現隊列呢?
spa

    初版:
code

        push()  :  直接將元素進棧1;
orm

        pop()  :  棧1 元素進棧2 ,棧2 出元素 ! 出完將元素還給棧1.
隊列

        總結:隊列要求先進先出 , 那越先進的元素 就在棧1的越下面  ,  這樣才能保證越先進的元素 在 棧2的越上面.  因此每次pop()須要現將棧1中元素所有挪到棧2  ,  出完 棧2 須要把元素還剩下的元素還回去!
it

//用兩個棧來實現一個隊列,完成隊列的Push和Pop操做。 隊列中的元素爲int類型。
package wj;
import java.util.Stack;
/**
 * Created by wangjia on 2015/8/10 
 */
public class Solution {
    
    Stack<Integer> stack1 = new Stack<Integer>();
    Stack<Integer> stack2 = new Stack<Integer>();
    //進隊
    public void push(int node) {
        stack1.push(node);
    }
    //出隊
    public int pop() {
        while(!stack1.empty()){
            stack2.push(stack1.pop());
        }
        int result= stack2.pop();
        while (stack2.empty()){
            stack1.push(stack2.pop());
        }
        return result;
    }
}

 第二版: io

    初版雖然正確,可是感受有些繁瑣!!!整體思路是沒有錯的.class

    通過分析以後,發現上訴步驟能夠省略一些.棧2中的元素確定是比棧1的中元素先進的!那是否有必要還回去呢?其實不用!
import

    當棧2中有元素時,直接出棧就好了!!當棧2木有元素時,從棧1的底部拿.

package wj;
import java.util.Stack;
/**
 * Created by wangjia on 2015/8/10 
 */
public class Solution {

    Stack<Integer> stack1 = new Stack<Integer>();
    Stack<Integer> stack2 = new Stack<Integer>();

    public void push(int node) {
        stack1.push(node);
    }
    //出隊
    public int pop() {
        if(stack2.empty()){
            while(!stack1.empty()){
                stack2.push(stack1.pop());
            }
        }
        return stack2.pop();
    }
}
相關文章
相關標籤/搜索