#include <bits/stdc++.h>
#include <string>
using namespace std;
/* */
ifstream f("data3.in");
//0 means not reversed
//1 means reversed
int reverseflag = 0;
struct node{
int number;
node *next;
node *prev;
};
node *tail = NULL;
node *initNode(int number)
{
node *head = new node;
head->next = NULL;
head->prev = NULL;
head->number = number;
return head;
}
void InsertFront(node *head, int number)
{
if(head->next != NULL)
{
node *cur = head;
node *tmp = new node;
cur = cur->next;
head->next = tmp;
tmp->prev = head;
tmp->next = cur;
tmp->number = number;
}
else
{
node *tmp = new node;
head->next = tmp;
tmp->prev = head;
tmp->next = NULL;
tmp->number = number;
tail = tmp;
}
}
void InsertBack(node *head, int number)
{
if(head->next!=NULL)
{
node *cur = tail;
node *last = new node;
cur->next = last;
last->next = NULL;
last->prev = cur;
last->number = number;
tail = last;
}
else
{
node *last = new node;
head->next = last;
last->prev = head;
last->number = number;
tail = last;
}
}
void PrintLinkedList(node *head)
{
if(head)
{
node *cur = head;
while(cur != NULL)
{
cout << cur->number << " ";
cur=cur->next;
}
cout << endl;
}
else
cout << "List is empty ..." << endl;
}
bool RemoveFront(node *head, int &a)
{
if(head->next==NULL)
{
cout << "No job for Ada?" << endl;
return false;
}
else
{
node *tmp = head->next;
a = tmp->number;
node *cur = tmp->next;
head->next = cur;
if(cur!=NULL)
cur->prev = head;
free(tmp);
return true;
}
}
bool RemoveBack(node *head, int &a)
{
if(head->next == NULL && head->number == -1)
{
cout << "No job for Ada?" << endl;
return false;
}
else
{
node *temp;
node *cur;
temp = tail;
cur = tail->prev;
a = tail->number;
cur->next = NULL;
free(temp);
tail = cur;
return true;
}
}
void ReverseList()
{
if(reverseflag==1)
reverseflag = 0;
else
reverseflag = 1;
}
int main ()
{
int num=-1;
int Qnums=0;
//keep track of node with number -1 -> it cannot be deleted !!!!
node *n = initNode(-1);
int a = 0;
string command="";
cin>>Qnums;
//f>>Qnums;
while(Qnums)
{
cin>>command;
cin>>num;
if(cin.fail()){
cin.clear();
}/*
f>>command;
f>>num;
if(f.fail()){
f.clear();
}*/
if(command=="push_back")
{
if(reverseflag==0)
{
InsertBack(n, num);
}
else
{
InsertFront(n, num);
}
}
else if(command == "back")
{
if(reverseflag==0)
{
bool flag = RemoveBack(n, a);
if(flag)
cout << a << endl;
}
else
{
bool flag = RemoveFront(n, a);
if(flag)
cout << a << endl;
}
}
else if(command == "toFront")
{
if(reverseflag==0)
{
InsertFront(n,num);
}
else
{
InsertBack(n, num);
}
}
else if(command == "front")
{
//PrintLinkedList(n);
if(reverseflag==0)
{
bool flag = RemoveFront(n, a);
if(flag)
cout << a << endl;
}
else
{
bool flag = RemoveBack(n, a);
if(flag)
cout << a << endl;
}
}
else if(command == "reverse")
{
ReverseList();
}
else
{
}
Qnums--;
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNpbmNsdWRlIDxzdHJpbmc+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgovKiAqLwoKaWZzdHJlYW0gZigiZGF0YTMuaW4iKTsKLy8wIG1lYW5zIG5vdCByZXZlcnNlZAovLzEgbWVhbnMgcmV2ZXJzZWQKaW50IHJldmVyc2VmbGFnID0gMDsKCnN0cnVjdCBub2RlewogICAgaW50IG51bWJlcjsKICAgIG5vZGUgKm5leHQ7CiAgICBub2RlICpwcmV2Owp9OwoKbm9kZSAqdGFpbCA9IE5VTEw7Cgpub2RlICppbml0Tm9kZShpbnQgbnVtYmVyKQp7CiAgICBub2RlICpoZWFkID0gbmV3IG5vZGU7CiAgICBoZWFkLT5uZXh0ID0gTlVMTDsKICAgIGhlYWQtPnByZXYgPSBOVUxMOwogICAgaGVhZC0+bnVtYmVyID0gbnVtYmVyOwogICAgcmV0dXJuIGhlYWQ7Cn0KCnZvaWQgSW5zZXJ0RnJvbnQobm9kZSAqaGVhZCwgaW50IG51bWJlcikKewogICAgaWYoaGVhZC0+bmV4dCAhPSBOVUxMKQogICAgewogICAgICAgIG5vZGUgKmN1ciA9IGhlYWQ7CiAgICAgICAgbm9kZSAqdG1wID0gbmV3IG5vZGU7CiAgICAgICAgY3VyID0gY3VyLT5uZXh0OwogICAgICAgIGhlYWQtPm5leHQgPSB0bXA7CiAgICAgICAgdG1wLT5wcmV2ID0gaGVhZDsKICAgICAgICB0bXAtPm5leHQgPSBjdXI7CiAgICAgICAgdG1wLT5udW1iZXIgPSBudW1iZXI7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgbm9kZSAqdG1wID0gbmV3IG5vZGU7CiAgICAgICAgaGVhZC0+bmV4dCA9IHRtcDsKICAgICAgICB0bXAtPnByZXYgPSBoZWFkOwogICAgICAgIHRtcC0+bmV4dCA9IE5VTEw7CiAgICAgICAgdG1wLT5udW1iZXIgPSBudW1iZXI7CiAgICAgICAgdGFpbCA9IHRtcDsKICAgIH0KCn0Kdm9pZCBJbnNlcnRCYWNrKG5vZGUgKmhlYWQsIGludCBudW1iZXIpCnsKICAgIGlmKGhlYWQtPm5leHQhPU5VTEwpCiAgICB7CiAgICAgICAgbm9kZSAqY3VyID0gdGFpbDsKICAgICAgICBub2RlICpsYXN0ID0gbmV3IG5vZGU7CiAgICAgICAgY3VyLT5uZXh0ID0gbGFzdDsKICAgICAgICBsYXN0LT5uZXh0ID0gTlVMTDsKICAgICAgICBsYXN0LT5wcmV2ID0gY3VyOwogICAgICAgIGxhc3QtPm51bWJlciA9IG51bWJlcjsKCiAgICAgICAgdGFpbCA9IGxhc3Q7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgbm9kZSAqbGFzdCA9IG5ldyBub2RlOwogICAgICAgIGhlYWQtPm5leHQgPSBsYXN0OwogICAgICAgIGxhc3QtPnByZXYgPSBoZWFkOwogICAgICAgIGxhc3QtPm51bWJlciA9IG51bWJlcjsKICAgICAgICB0YWlsID0gbGFzdDsKICAgIH0KCn0KCnZvaWQgUHJpbnRMaW5rZWRMaXN0KG5vZGUgKmhlYWQpCnsKICAgIGlmKGhlYWQpCiAgICB7CiAgICAgICAgbm9kZSAqY3VyID0gaGVhZDsKICAgICAgICB3aGlsZShjdXIgIT0gTlVMTCkKICAgICAgICB7CiAgICAgICAgICAgIGNvdXQgPDwgY3VyLT5udW1iZXIgPDwgIiAiOwogICAgICAgICAgICBjdXI9Y3VyLT5uZXh0OwogICAgICAgIH0KICAgICAgICBjb3V0IDw8IGVuZGw7CiAgICB9CiAgICBlbHNlCiAgICAgICAgY291dCA8PCAiTGlzdCBpcyBlbXB0eSAuLi4iIDw8IGVuZGw7Cn0KCmJvb2wgUmVtb3ZlRnJvbnQobm9kZSAqaGVhZCwgaW50ICZhKQp7CiAgICBpZihoZWFkLT5uZXh0PT1OVUxMKQogICAgewogICAgICAgIGNvdXQgPDwgIk5vIGpvYiBmb3IgQWRhPyIgPDwgZW5kbDsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgbm9kZSAqdG1wID0gaGVhZC0+bmV4dDsKICAgICAgICBhID0gdG1wLT5udW1iZXI7CiAgICAgICAgbm9kZSAqY3VyID0gdG1wLT5uZXh0OwogICAgICAgIGhlYWQtPm5leHQgPSBjdXI7CiAgICAgICAgCiAgICAgICAgaWYoY3VyIT1OVUxMKQogICAgICAgICAgICBjdXItPnByZXYgPSBoZWFkOwogICAgICAgIGZyZWUodG1wKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KfQoKYm9vbCBSZW1vdmVCYWNrKG5vZGUgKmhlYWQsIGludCAmYSkKewoKICAgIGlmKGhlYWQtPm5leHQgPT0gTlVMTCAmJiBoZWFkLT5udW1iZXIgPT0gLTEpCiAgICB7CiAgICAgICAgY291dCA8PCAiTm8gam9iIGZvciBBZGE/IiA8PCBlbmRsOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgICBub2RlICp0ZW1wOwogICAgICAgIG5vZGUgKmN1cjsKCiAgICAgICAgdGVtcCA9IHRhaWw7CiAgICAgICAgY3VyID0gdGFpbC0+cHJldjsKICAgICAgICBhID0gdGFpbC0+bnVtYmVyOwogICAgICAgIGN1ci0+bmV4dCA9IE5VTEw7CiAgICAgICAgZnJlZSh0ZW1wKTsKICAgICAgICB0YWlsID0gY3VyOwogICAgICAgIHJldHVybiB0cnVlOwogICAgfQp9CgoKdm9pZCBSZXZlcnNlTGlzdCgpCnsKICAgIGlmKHJldmVyc2VmbGFnPT0xKQogICAgICAgIHJldmVyc2VmbGFnID0gMDsKICAgIGVsc2UKICAgICAgICByZXZlcnNlZmxhZyA9IDE7Cn0KCgppbnQgbWFpbiAoKQp7CiAgICAKICAgIGludCBudW09LTE7CiAgICBpbnQgUW51bXM9MDsKICAgIC8va2VlcCB0cmFjayBvZiBub2RlIHdpdGggbnVtYmVyIC0xIC0+IGl0IGNhbm5vdCBiZSBkZWxldGVkICEhISEKICAgIG5vZGUgKm4gPSBpbml0Tm9kZSgtMSk7CiAgICBpbnQgYSA9IDA7CiAgICBzdHJpbmcgY29tbWFuZD0iIjsKICAgIGNpbj4+UW51bXM7CiAgICAvL2Y+PlFudW1zOwogICAgd2hpbGUoUW51bXMpCiAgICB7CiAgICAgICAgY2luPj5jb21tYW5kOwogICAgICAgIGNpbj4+bnVtOwogICAgICAgIGlmKGNpbi5mYWlsKCkpewogICAgICAgICAgICBjaW4uY2xlYXIoKTsKICAgICAgICB9LyoKICAgICAgICBmPj5jb21tYW5kOwogICAgICAgIGY+Pm51bTsKICAgICAgICBpZihmLmZhaWwoKSl7CiAgICAgICAgICAgIGYuY2xlYXIoKTsKICAgICAgICB9Ki8KICAgICAgICBpZihjb21tYW5kPT0icHVzaF9iYWNrIikKICAgICAgICB7CiAgICAgICAgICAgIGlmKHJldmVyc2VmbGFnPT0wKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBJbnNlcnRCYWNrKG4sIG51bSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBJbnNlcnRGcm9udChuLCBudW0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYoY29tbWFuZCA9PSAiYmFjayIpCiAgICAgICAgewogICAgICAgICAgICBpZihyZXZlcnNlZmxhZz09MCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgYm9vbCBmbGFnID0gUmVtb3ZlQmFjayhuLCBhKTsKICAgICAgICAgICAgICAgIGlmKGZsYWcpCiAgICAgICAgICAgICAgICAgICAgY291dCA8PCBhIDw8IGVuZGw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBib29sIGZsYWcgPSBSZW1vdmVGcm9udChuLCBhKTsKICAgICAgICAgICAgICAgIGlmKGZsYWcpCiAgICAgICAgICAgICAgICAgICAgY291dCA8PCBhIDw8IGVuZGw7CiAgICAgICAgICAgIH0KCiAgICAgICAgfQogICAgICAgIGVsc2UgaWYoY29tbWFuZCA9PSAidG9Gcm9udCIpCiAgICAgICAgewogICAgICAgICAgICBpZihyZXZlcnNlZmxhZz09MCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgSW5zZXJ0RnJvbnQobixudW0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgSW5zZXJ0QmFjayhuLCBudW0pOwogICAgICAgICAgICB9CgogICAgICAgIH0KICAgICAgICBlbHNlIGlmKGNvbW1hbmQgPT0gImZyb250IikKICAgICAgICB7CiAgICAgICAgICAgIC8vUHJpbnRMaW5rZWRMaXN0KG4pOwogICAgICAgICAgICBpZihyZXZlcnNlZmxhZz09MCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgYm9vbCBmbGFnID0gUmVtb3ZlRnJvbnQobiwgYSk7CiAgICAgICAgICAgICAgICBpZihmbGFnKQogICAgICAgICAgICAgICAgICAgIGNvdXQgPDwgYSA8PCBlbmRsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgYm9vbCBmbGFnID0gUmVtb3ZlQmFjayhuLCBhKTsKICAgICAgICAgICAgICAgIGlmKGZsYWcpCiAgICAgICAgICAgICAgICAgICAgY291dCA8PCBhIDw8IGVuZGw7CiAgICAgICAgICAgIH0KCiAgICAgICAgfQogICAgICAgIGVsc2UgaWYoY29tbWFuZCA9PSAicmV2ZXJzZSIpCiAgICAgICAgewogICAgICAgICAgICBSZXZlcnNlTGlzdCgpOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgIH0KICAgICAgICBRbnVtcy0tOwogICAgfQogICAgcmV0dXJuIDA7Cn0K
MTUKdG9Gcm9udCA5Mwpmcm9udApiYWNrCnJldmVyc2UKYmFjawpyZXZlcnNlCnRvRnJvbnQgODAKcHVzaF9iYWNrIDUzCnB1c2hfYmFjayA1MApmcm9udApmcm9udApyZXZlcnNlCnB1c2hfYmFjayA2NgpyZXZlcnNlCmZyb250
15
toFront 93
front
back
reverse
back
reverse
toFront 80
push_back 53
push_back 50
front
front
reverse
push_back 66
reverse
front