題目描述
用兩個棧來實現一個隊列,完成隊列的Push和Pop操作。 隊列中的元素爲int類型。
思路:
棧是先進後出
要實現的是在隊尾插入節點
在隊首刪除節點
首先呢,可以拿一個例子來看,首先通過一個例子來分析,比如插入一個元素a,可以先將它插入到棧1之中。棧1中目前的元素爲{a},棧2爲空。
再壓入兩個元素b,c。同上。此時棧1的元素爲{a,b,c}。棧2爲空。
現在要刪除啦。想要刪除的元素爲隊首元素。此時需要把a,b,c放在棧2中,然後刪除棧2的棧頂就完成了刪除隊首的操作啦。
此時棧1爲空,棧2爲{c,b},b在棧頂
如果想要再次刪除的話,剩下的爲b,c,需要刪除的爲b。b在棧頂,直接刪除。
此時棧2爲{c},棧1爲空。
總結可知:
刪除一個元素,如果棧2不爲空,直接彈出棧2的棧頂。
棧2爲空的時候,把棧1的元素依次取出放到棧2中,再刪除,即彈出棧頂,如果棧1也爲空,則隊列爲空,無法進行刪除操作
添加一個元素,若棧2爲空,直接添加到棧1之中即可。
如果棧2有元素,則依次取出再放回棧1,再添加元素即可。
class Solution
{
public:
void push(int node) {
//如果棧2不爲空,則取回數字到棧1,再添加元素
while(!stack2.empty()){
stack1.push(stack2.top());
stack2.pop();
}
stack1.push(node);
}
int pop() {
//如果棧1不爲空,則取回數字到棧2,再刪除元素
while(!stack1.empty())
{
stack2.push(stack1.top());
stack1.pop();
}
int t=stack2.top();
stack2.pop();
return t;
}
private:
stack<int> stack1;
stack<int> stack2;
};