用两个栈来实现一个队列,完成队列的Push和Pop操做。 队列中的元素为int类型。node
解题前咱们先来了解下什么是栈和队列
栈是限制插入和删除只能在一个位置上进行的表,是后进先出
表,好比,在栈中依次插入1,2,3,4(由栈顶插入),以下图所示。因为栈是限制只能在一个位置上进行操做,因此删除(弹出)也只能在栈顶进行,即弹出顺序为4,3,2,1。正好是最后插入4的最早弹出,最早插入的1最后弹出。
web
队列是插入在一端进行而删除在另外一端进行的表,是先进先出
表,好比依次在队列中插入1,2,3,4(这里是从队尾插入)。以下图所示。因为删除只能在另外一端即队头(队首)进行,因此出队顺序为1,2,3,4。能够看到最早入队的1是最早出队,最后入队的4也是最后出队。
svg
题目要求是用两个栈来模拟一个队列。栈的特性是后进先出,队列的特性是先进先出,能够发现他们的顺序恰好是相反的。那么天然就想到相反的相反的就是对的顺序了。举个例子,仍然是往栈A中依次插入1,2,3,4,此时它的弹出顺序是4,3,2,1。若再将这个弹出顺序4,3,2,1,依次插入到栈B中,此时栈B的弹出顺序就是1,2,3,4,对于最开始插入的1,2,3,4序列恰好知足了先进先出的特性。spa
using System.Collections.Generic; class Solution { Stack<int> pushStack = new Stack<int>(); Stack<int> popStack = new Stack<int>(); // 入队 public void push(int node) { pushStack.Push(node); } // 出队 public int pop() { if (popStack.Count <= 0) { while(pushStack.Count > 0) { // 在出队时,先将pushStack中元素依次弹出并插入到popStack中 popStack.Push(pushStack.Pop()); } } // 再经过popStack弹出 return popStack.Pop(); } }