#include <stdio.h>
typedef struct node{
int val;
struct node* next;
struct node* prev;
}NODE;
struct node* head=0;
struct node* tail=0;
int addNode(int v){
if(head==0){
struct node
* n
=malloc(sizeof(NODE
)); n->val=v;
head=n;
tail=n;
n->prev=0;
}
else{
struct node* temp=head;
while(temp->next != 0)
{
temp=temp->next;
}
struct node
* n
=malloc(sizeof(NODE
)); n->val=v;
n->prev=temp;
temp->next=n;
n->next=0;
tail=n;
}
}
int addBeg(int v){
struct node
* n
=malloc(sizeof(NODE
)); n->val=v;
n->next=head;
head->prev=n;
head=n;
n->prev=0;
}
int addValAt(int v,int p){
int c=1;
struct node* temp=head;
while(c != p)
{
c++;
temp=temp->next;
}
struct node
* n
=malloc(sizeof(NODE
)); n->val=v;
n->next=temp->next;
temp->next->prev=n;
n->prev=temp;
temp->next=n;
}
void print(){
struct node* temp=head;
while(temp != 0){
temp=temp->next;
}
}
void printRev(){
struct node* temp=tail;
while(temp != 0){
temp=temp->prev;
}
}
int main(void) {
int i=0;
for(;i<10;i++){
addNode(i);
}
addBeg(5);
addValAt(7,2);
printRev();
print();
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+Cgp0eXBlZGVmIHN0cnVjdCBub2RlewoJaW50IHZhbDsKCXN0cnVjdCBub2RlKiBuZXh0OwoJc3RydWN0IG5vZGUqIHByZXY7Cgl9Tk9ERTsKCQpzdHJ1Y3Qgbm9kZSogaGVhZD0wOwpzdHJ1Y3Qgbm9kZSogdGFpbD0wOwppbnQgYWRkTm9kZShpbnQgdil7CglpZihoZWFkPT0wKXsKCQlzdHJ1Y3Qgbm9kZSogbj1tYWxsb2Moc2l6ZW9mKE5PREUpKTsKCQluLT52YWw9djsKCQloZWFkPW47CgkJdGFpbD1uOwoJCW4tPnByZXY9MDsKCX0KCWVsc2V7CgkJc3RydWN0IG5vZGUqIHRlbXA9aGVhZDsKCQl3aGlsZSh0ZW1wLT5uZXh0ICE9IDApCgkJewoJCQl0ZW1wPXRlbXAtPm5leHQ7CgkJfQoJCXN0cnVjdCBub2RlKiBuPW1hbGxvYyhzaXplb2YoTk9ERSkpOwoJCW4tPnZhbD12OwoJCW4tPnByZXY9dGVtcDsKCQl0ZW1wLT5uZXh0PW47CgkJbi0+bmV4dD0wOwoJCXRhaWw9bjsKCX0KfQoKaW50IGFkZEJlZyhpbnQgdil7CglzdHJ1Y3Qgbm9kZSogbj1tYWxsb2Moc2l6ZW9mKE5PREUpKTsKCW4tPnZhbD12OwoJbi0+bmV4dD1oZWFkOwoJaGVhZC0+cHJldj1uOwoJaGVhZD1uOwoJbi0+cHJldj0wOwp9CgppbnQgYWRkVmFsQXQoaW50IHYsaW50IHApewoJaW50IGM9MTsKCXN0cnVjdCBub2RlKiB0ZW1wPWhlYWQ7Cgl3aGlsZShjICE9IHApCgl7CgkJYysrOwoJCXRlbXA9dGVtcC0+bmV4dDsKCX0KCXN0cnVjdCBub2RlKiBuPW1hbGxvYyhzaXplb2YoTk9ERSkpOwoJbi0+dmFsPXY7CgluLT5uZXh0PXRlbXAtPm5leHQ7Cgl0ZW1wLT5uZXh0LT5wcmV2PW47CgluLT5wcmV2PXRlbXA7Cgl0ZW1wLT5uZXh0PW47CgkKfQoKdm9pZCBwcmludCgpewoJc3RydWN0IG5vZGUqIHRlbXA9aGVhZDsKCXdoaWxlKHRlbXAgIT0gMCl7CgkJcHJpbnRmKCIlZCIsdGVtcC0+dmFsKTsKCQlwcmludGYoIi0tPiIpOwoJCXRlbXA9dGVtcC0+bmV4dDsKCX0KCQlwcmludGYoIlxuXG4iKTsKfQp2b2lkIHByaW50UmV2KCl7CglzdHJ1Y3Qgbm9kZSogdGVtcD10YWlsOwoJd2hpbGUodGVtcCAhPSAwKXsKCQlwcmludGYoIiVkIix0ZW1wLT52YWwpOwoJCXByaW50ZigiLS0+Iik7CgkJdGVtcD10ZW1wLT5wcmV2OwoJfQoJcHJpbnRmKCJcblxuIik7Cn0KCgoKaW50IG1haW4odm9pZCkgewoJaW50IGk9MDsKCWZvcig7aTwxMDtpKyspewoJCWFkZE5vZGUoaSk7Cgl9CglhZGRCZWcoNSk7CglhZGRWYWxBdCg3LDIpOwoJcHJpbnRSZXYoKTsKCXByaW50KCk7CglyZXR1cm4gMDsKfQo=