用兩個棧來實現一個隊列,完成隊列的Push和Pop操做。 隊列中的元素爲int類型。java
棧的特色是先進後出,隊列的特色則是先進先出。node
題目要求咱們用兩個棧來實現一個隊列,棧和隊列都有入棧(入隊)的操做,因此咱們能夠使用一個棧來模擬入隊的操做,另外一個棧用來負責出隊。spa
利用stack1模擬入隊操做,stack2模擬出隊操做。code
當有元素入隊時,就直接壓入stack1中,當要出出隊時,stack1中元素彈出的順序和要求出隊的順序是正好相反的,咱們能夠將stack1的元素依次彈出,再壓入stack2中,此時stack2中元素彈出的順序,正好與要求出隊的順序是一致的。固然每次出隊的時候都要判斷stack2是否爲空,爲空的話就將stack1中元素彈出再壓入stack2中,再彈出stack2中的棧頂元素,若是不爲空,直接彈出棧頂元素便可。blog
C++隊列
class Solution { public: void push(int node) { stack1.push(node); } int pop() { int res; if(!stack2.empty()){ res = stack2.top(); stack2.pop(); return res; } else{ while(!stack1.empty()){ stack2.push(stack1.top()); stack1.pop(); } res = stack2.top(); stack2.pop(); return res; } } private: stack<int> stack1; stack<int> stack2; };
Javaio
import java.util.Stack; 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() { int res; if(stack2.empty()){ while(!stack1.empty()){ stack2.push(stack1.peek()); stack1.pop(); } } res = stack2.peek(); stack2.pop(); return res; } }