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

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

最近全國疫情嚴重,待在家裏沒事幹,馬上又要準備春招了,最近刷刷題,記錄一下!再說一句,武漢加油,大家出門記得戴口罩!

1、題目描述

用兩個棧來實現一個隊列,完成隊列的Push和Pop操作。 隊列中的元素爲int類型。

2、思路分析

本題的基本意圖是:用兩個後入先出的棧來實現先入先出的隊列。
對於這個問題,我們可以通過一個實例來進行具體分析。不難得出相應的規律:有兩個棧stack1和stack2,每次向隊列中插入元素可以都壓入到stack1中,當需要從隊列中刪除元素時,我們應該是刪除最早插入的那個(FIFO),這時可以將stack1中的元素逐個彈出並壓入stack2,直到stack1爲空,這時最早插入的元素就位於stack2的棧頂,可以直接彈出。
因此,我們總結如下:壓入元素時,都壓入棧1,當需要彈出時,從棧2彈出,當棧2不爲空時直接彈出棧頂元素,爲空時將棧1的元素“倒進去”。

3、代碼

package com.jianzhioffer;

import java.util.Stack;

public class Main05 {
    //棧 先進後出
    //隊列 先進先出
    //push 操作在棧1裏面完成  pop操作在棧2裏面完成
    /*
        方法一:通過兩個棧中元素之間的複製交換去實現隊列
     */
    Stack<Integer> stack1 = new Stack<Integer>();
    Stack<Integer> stack2 = new Stack<Integer>();
    public void push(int node) {
        while(!stack2.isEmpty()) {
            stack1.push(stack2.pop()); //將棧2中的元素加入到棧1中
        }
        stack1.push(node);

    }
    public int pop() {
        while(!stack1.isEmpty()) {
            stack2.push(stack1.pop()); //將棧1中的元素加入到棧2中
        }
        return stack2.pop();
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章