#include <iostream>
using namespace std;
class Queue{
private:
class Node{
private:
int element;
Node *next;
public:
Node(): element(0), next(0) {}
Node(int e): element(e), next(0) {}
void setNext(Node *n) { next = n; }
int getElement() { return element; }
Node *getNext() { return next; }
};
Node *begin;
Node *end;
public:
Queue(): begin(0), end(0) {}
void add(int value){
if (0 == begin){
begin = new Node(value);
end = begin;
}
else{
Node *n = new Node(value);
end->setNext(n);
end = n;
}
}
Node *dequeue(){
if (0 == begin) return 0;
else{
if (begin == end){
Node *tmp = begin;
begin = end = 0;
return tmp;
}
else{
Node *tmp = begin;
begin = begin->getNext();
return tmp;
}
}
}
void print(){
Node *tmp = begin;
while (tmp){
std::cout << tmp->getElement() << " ";
tmp = tmp->getNext();
}std::cout << std::endl;
}
bool isEmpty() { return (0 == begin); }
Node *getBegin() { return begin; }
};
int main() {
Queue q;
q.add(1);
q.add(2);
q.add(3);
q.print();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgUXVldWV7CiAgICBwcml2YXRlOgogICAgICAgIGNsYXNzIE5vZGV7CiAgICAgICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICAgICBpbnQgZWxlbWVudDsKICAgICAgICAgICAgICAgIE5vZGUgKm5leHQ7CiAgICAgICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIE5vZGUoKTogZWxlbWVudCgwKSwgbmV4dCgwKSB7fQogICAgICAgICAgICAgICAgTm9kZShpbnQgZSk6IGVsZW1lbnQoZSksIG5leHQoMCkge30KICAgICAgICAgICAgICAgIHZvaWQgc2V0TmV4dChOb2RlICpuKSB7IG5leHQgPSBuOyB9CiAgICAgICAgICAgICAgICBpbnQgZ2V0RWxlbWVudCgpIHsgcmV0dXJuIGVsZW1lbnQ7IH0KICAgICAgICAgICAgICAgIE5vZGUgKmdldE5leHQoKSB7IHJldHVybiBuZXh0OyB9CiAgICAgICAgfTsKICAgICAgICBOb2RlICpiZWdpbjsKICAgICAgICBOb2RlICplbmQ7CiAgICBwdWJsaWM6CiAgICAgICAgUXVldWUoKTogYmVnaW4oMCksIGVuZCgwKSB7fQogICAgICAgIHZvaWQgYWRkKGludCB2YWx1ZSl7CiAgICAgICAgICAgIGlmICgwID09IGJlZ2luKXsKICAgICAgICAgICAgICAgIGJlZ2luID0gbmV3IE5vZGUodmFsdWUpOwogICAgICAgICAgICAgICAgZW5kID0gYmVnaW47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZXsKICAgICAgICAgICAgICAgIE5vZGUgKm4gPSBuZXcgTm9kZSh2YWx1ZSk7CiAgICAgICAgICAgICAgICBlbmQtPnNldE5leHQobik7CiAgICAgICAgICAgICAgICBlbmQgPSBuOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIE5vZGUgKmRlcXVldWUoKXsKICAgICAgICAgICAgaWYgKDAgPT0gYmVnaW4pIHJldHVybiAwOwogICAgICAgICAgICBlbHNlewogICAgICAgICAgICAgICAgaWYgKGJlZ2luID09IGVuZCl7CiAgICAgICAgICAgICAgICAgICAgTm9kZSAqdG1wID0gYmVnaW47CiAgICAgICAgICAgICAgICAgICAgYmVnaW4gPSBlbmQgPSAwOwogICAgICAgICAgICAgICAgICAgIHJldHVybiB0bXA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlewogICAgICAgICAgICAgICAgICAgIE5vZGUgKnRtcCA9IGJlZ2luOwogICAgICAgICAgICAgICAgICAgIGJlZ2luID0gYmVnaW4tPmdldE5leHQoKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG1wOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHZvaWQgcHJpbnQoKXsKICAgICAgICAgICAgTm9kZSAqdG1wID0gYmVnaW47CiAgICAgICAgICAgIHdoaWxlICh0bXApewogICAgICAgICAgICAgICAgc3RkOjpjb3V0IDw8IHRtcC0+Z2V0RWxlbWVudCgpIDw8ICIgIjsKICAgICAgICAgICAgICAgIHRtcCA9IHRtcC0+Z2V0TmV4dCgpOwogICAgICAgICAgICB9c3RkOjpjb3V0IDw8IHN0ZDo6ZW5kbDsKICAgICAgICB9CiAgICAgICAgYm9vbCBpc0VtcHR5KCkgeyByZXR1cm4gKDAgPT0gYmVnaW4pOyB9CiAgICAgICAgTm9kZSAqZ2V0QmVnaW4oKSB7IHJldHVybiBiZWdpbjsgfQp9OwoKaW50IG1haW4oKSB7CglRdWV1ZSBxOwoJCglxLmFkZCgxKTsKCXEuYWRkKDIpOwoJcS5hZGQoMyk7CgkKCXEucHJpbnQoKTsKfQ==