1. 程式人生 > 其它 >CodingInterview-06用兩個棧實現佇列

CodingInterview-06用兩個棧實現佇列

技術標籤:劍指Offer

Stack stack1;
Stack stack2;

public CQueue06() {
    //題目要求兩個棧實現佇列
    stack1 = new Stack();
    stack2 = new Stack();
}

public void appendTail(int value) {
    //stack1用來存所有的值
    stack1.push(value);
}

public int deleteHead() {
    if(stack1.empty()){
        return -1;
    }
    /*根據棧的特性 先進後出
    佇列的特性 先進先出
    也就是在刪除一個元素的時候把棧反過來然後出棧*/
    while (!stack1.empty()) {
        //反過來存到stack2
        stack2.push(stack1.pop());
    }
    //出棧儲存結果
    int res = (int) stack2.pop();
    //再返回來放回stack1 如果不返回來再插入資料會出問題 可以優化
    while (!stack2.empty()){
        stack1.push(stack2.pop());
    }
    return res;

}

public int deleteHead() {
    /*根據棧的特性 先進後出
    佇列的特性 先進先出
    也就是在刪除一個元素的時候把棧反過來然後出棧*/
    //如果stack2還有值的話就沒必要把stack1倒過來 因為是stack2先出
    if(stack2.empty()) {
        while (!stack1.empty()) {
            //反過來存到stack2
            stack2.push(stack1.pop());
        }
    }
    return stack2.empty()? -1 : (int) stack2.pop();
}

優化後也不是很理想 看了下別人的答案沒按要求用棧實現