剑指 Offer 09. 用两个栈实现队列
核心思想是用第二个栈把栈元素倒序一遍就是队列的顺序,出栈中如果没有元素就从入栈往里加,有就直接出。
- C+的stack的pop是没有返回值的,要先存一下top;C#的stack要new。
//C++
class CQueue {
public:
stack<int> stin;
stack<int> stout;
CQueue() {
}
void appendTail(int value) {
stin.push(value);
}
int deleteHead() {
if (stout.empty()) {
if (stin.empty()) return -1;
while (!stin.empty()) {
stout.push(stin.top());
stin.pop();
}
}
int res = stout.top();
stout.pop();
return res;
}
};
//C#
public class CQueue {
Stack<int> stIn = new Stack<int>();
Stack<int> stOut = new Stack<int>();
public CQueue() {
}
public void AppendTail(int value) {
stIn.Push(value);
}
public int DeleteHead() {
if (stOut.Count == 0) {
if (stIn.Count == 0)
return -1;
while (stIn.Count != 0) {
stOut.Push(stIn.Pop());
}
}
return stOut.Pop();
}
}