字节面试这题没做出来,丢人
解题思路
想象有两个装乒乓球的盒子,要取出最下面那个就只能把所有的倒到另一个空盒子里
本题同解
C++代码
class CQueue {
private:
stack<int> sa;
stack<int> sb;
public:
CQueue() {
}
void appendTail(int value) {
sa.push(value);
}
int deleteHead() {
if (sa.empty()) return -1;
while (!sa.empty()) {
sb.push(sa.top());
sa.pop();
}
int ans = sb.top();
sb.pop();
while (!sb.empty()) {
sa.push(sb.top());
sb.pop();
}
return ans;
}
};
/**
* Your CQueue object will be instantiated and called as such:
* CQueue* obj = new CQueue();
* obj->appendTail(value);
* int param_2 = obj->deleteHead();
*/

Java代码
class CQueue {
private Stack<Integer> st1;
private Stack<Integer> st2;
public CQueue() {
st1 = new Stack<Integer>();
st2 = new Stack<Integer>();
}
public void appendTail(int value) {
st1.push(new Integer(value));
}
public int deleteHead() {
if (st1.isEmpty()) return -1;
while (!st1.isEmpty()) {
st2.push(st1.pop());
}
int ans = st2.pop();
while (!st2.isEmpty()) {
st1.push(st2.pop());
}
return ans;
}
}
/**
* Your CQueue object will be instantiated and called as such:
* CQueue obj = new CQueue();
* obj.appendTail(value);
* int param_2 = obj.deleteHead();
*/

这篇博客介绍了如何利用两个栈来模拟队列的操作,包括`appendTail`(入队)和`deleteHead`(出队)。在C++和Java中分别给出了实现代码,通过不断将元素从一个栈转移到另一个栈来实现队列的特性。当需要出队时,如果第一个栈为空,则返回-1,否则将所有元素移到第二个栈,然后返回第二个栈顶部元素并将其移除。

被折叠的 条评论
为什么被折叠?



