LeetCode 剑指offer 09.用两个栈实现队列
题目描述
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )
这道题很简单,主要理解栈与队列的区别,注意细节就可以
题解
c++
class CQueue {
public:stack<int> s1, s2;CQueue() {while (!s1.empty()) {s1.pop();}while (!s2.empty()) {s2.pop();}}void appendTail(int value) {s1.push(value);}int deleteHead() {if (s2.empty()) {while(!s1.empty()) {s2.push(s1.top());s1.pop();}}if (s2.empty()) {return -1;} else {int app = s2.top();s2.pop();return app;}}
};/*** Your CQueue object will be instantiated and called as such:* CQueue* obj = new CQueue();* obj->appendTail(value);* int param_2 = obj->deleteHead();*/
Go
type CQueue struct {inStack, outStack []int
}func Constructor() CQueue {return CQueue{}
}func (this *CQueue) AppendTail(value int) {this.inStack = append(this.inStack, value)
}func (this *CQueue) DeleteHead() int {if len(this.outStack) == 0 {if len(this.inStack) == 0 {return -1}this.in2out()}value := this.outStack[len(this.outStack)-1]this.outStack = this.outStack[:len(this.outStack)-1]return value
}func (this *CQueue) in2out() {for len(this.inStack) > 0 {this.outStack = append(this.outStack, this.inStack[len(this.inStack)-1])this.inStack = this.inStack[:len(this.inStack)-1]}
}