#include<stdio.h>
#include<stdlib.h>
struct listnode
{
int data;
struct listnode* next;
struct listnode* prev;
};
struct listnode* head=NULL;
struct listnode* tail=NULL;
struct listnode* createnode(int data)
{
struct listnode* temp = (struct listnode*)malloc(sizeof(struct listnode));
temp->data=data;
temp->next=NULL;
temp->prev=NULL;
return temp;
}
void insertlast(int data)
{
if(head==NULL)
{
head=createnode(data);
tail=head;
}
else
{
struct listnode* temp = createnode(data) ;
tail->next=temp ;
temp->prev=tail;
tail=temp;
}
}
void insertfirst(int data)
{
if(head==NULL)
{
head=createnode(data);
tail=head;
}
else
{
struct listnode* temp = createnode(data) ;
temp->next=head;
head->prev=temp;
head=temp;
}
}
struct listnode* searchnote(int key)
{
for(struct listnode* i=head; i!=NULL; i=i->next)
{
if(key== i->data)
{
return i;
}
}
}
void insertbefore(int data,int key)
{
struct listnode* loc = searchnote(key);
if(loc==NULL)
{
return;
}
struct listnode* temp = createnode(data) ;
temp->prev=loc->prev;
loc->prev->next=temp;
temp->next=loc;
loc->prev=temp;
}
void deleteany(int key){
struct listnode* loc = searchnote(key);
if(loc == NULL){
return;
}
else{
loc->prev->next=loc->next;
loc->next->prev=loc->prev;
free(loc);
loc=NULL;
}
}
void printlist()
{
for(struct listnode* i=head; i!=NULL; i=i->next)
{
printf("%d -> ",i->data) ;
}
}
int main()
{
insertlast(9);
insertlast(6);
insertlast(3);
insertlast(4);
insertlast(16);
insertlast(0);
insertlast(2);
insertlast(8);
insertbefore(15,0);
deleteany(4);
deleteany(16);
printf("print elements: ");
printlist();
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8c3RkbGliLmg+CnN0cnVjdCBsaXN0bm9kZQp7CiAgICBpbnQgZGF0YTsKICAgIHN0cnVjdCBsaXN0bm9kZSogbmV4dDsKICAgIHN0cnVjdCBsaXN0bm9kZSogcHJldjsKCn07CgpzdHJ1Y3QgbGlzdG5vZGUqIGhlYWQ9TlVMTDsKc3RydWN0IGxpc3Rub2RlKiB0YWlsPU5VTEw7CgpzdHJ1Y3QgbGlzdG5vZGUqIGNyZWF0ZW5vZGUoaW50IGRhdGEpCnsKICAgIHN0cnVjdCBsaXN0bm9kZSogdGVtcCA9IChzdHJ1Y3QgbGlzdG5vZGUqKW1hbGxvYyhzaXplb2Yoc3RydWN0IGxpc3Rub2RlKSk7CiAgICB0ZW1wLT5kYXRhPWRhdGE7CiAgICB0ZW1wLT5uZXh0PU5VTEw7CiAgICB0ZW1wLT5wcmV2PU5VTEw7CiAgICByZXR1cm4gdGVtcDsKfQoKdm9pZCBpbnNlcnRsYXN0KGludCBkYXRhKQp7CiAgICBpZihoZWFkPT1OVUxMKQogICAgewogICAgICAgIGhlYWQ9Y3JlYXRlbm9kZShkYXRhKTsKICAgICAgICB0YWlsPWhlYWQ7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgc3RydWN0IGxpc3Rub2RlKiB0ZW1wID0gY3JlYXRlbm9kZShkYXRhKSA7CiAgICAgICAgdGFpbC0+bmV4dD10ZW1wIDsKICAgICAgICB0ZW1wLT5wcmV2PXRhaWw7CiAgICAgICAgdGFpbD10ZW1wOwogICAgfQp9CnZvaWQgaW5zZXJ0Zmlyc3QoaW50IGRhdGEpCnsKICAgIGlmKGhlYWQ9PU5VTEwpCiAgICB7CiAgICAgICAgaGVhZD1jcmVhdGVub2RlKGRhdGEpOwogICAgICAgIHRhaWw9aGVhZDsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgICBzdHJ1Y3QgbGlzdG5vZGUqIHRlbXAgPSBjcmVhdGVub2RlKGRhdGEpIDsKICAgICAgICB0ZW1wLT5uZXh0PWhlYWQ7CiAgICAgICAgaGVhZC0+cHJldj10ZW1wOwogICAgICAgIGhlYWQ9dGVtcDsKICAgIH0KfQoKc3RydWN0IGxpc3Rub2RlKiBzZWFyY2hub3RlKGludCBrZXkpCnsKICAgIGZvcihzdHJ1Y3QgbGlzdG5vZGUqIGk9aGVhZDsgaSE9TlVMTDsgaT1pLT5uZXh0KQogICAgewogICAgICAgIGlmKGtleT09IGktPmRhdGEpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gaTsKICAgICAgICB9CiAgICB9Cn0KCnZvaWQgaW5zZXJ0YmVmb3JlKGludCBkYXRhLGludCBrZXkpCnsKICAgIHN0cnVjdCBsaXN0bm9kZSogbG9jID0gc2VhcmNobm90ZShrZXkpOwogICAgaWYobG9jPT1OVUxMKQogICAgewogICAgICAgIHJldHVybjsKICAgIH0KICAgIHN0cnVjdCBsaXN0bm9kZSogdGVtcCA9IGNyZWF0ZW5vZGUoZGF0YSkgOwogICAgdGVtcC0+cHJldj1sb2MtPnByZXY7CiAgICBsb2MtPnByZXYtPm5leHQ9dGVtcDsKICAgIHRlbXAtPm5leHQ9bG9jOwogICAgbG9jLT5wcmV2PXRlbXA7CgoKCgoKCn0KCnZvaWQgZGVsZXRlYW55KGludCBrZXkpewogICAgICAgc3RydWN0IGxpc3Rub2RlKiBsb2MgPSBzZWFyY2hub3RlKGtleSk7CmlmKGxvYyA9PSBOVUxMKXsKICAgIHJldHVybjsKfQplbHNlewogIGxvYy0+cHJldi0+bmV4dD1sb2MtPm5leHQ7CiAgbG9jLT5uZXh0LT5wcmV2PWxvYy0+cHJldjsKICBmcmVlKGxvYyk7CiAgbG9jPU5VTEw7Cn0KCn0KCgp2b2lkIHByaW50bGlzdCgpCnsKICAgIGZvcihzdHJ1Y3QgbGlzdG5vZGUqIGk9aGVhZDsgaSE9TlVMTDsgaT1pLT5uZXh0KQogICAgewogICAgICAgIHByaW50ZigiJWQgLT4gIixpLT5kYXRhKSA7CiAgICB9Cn0KCmludCBtYWluKCkKewogICAgaW5zZXJ0bGFzdCg5KTsKICAgIGluc2VydGxhc3QoNik7CiAgICBpbnNlcnRsYXN0KDMpOwogICAgaW5zZXJ0bGFzdCg0KTsKICAgIGluc2VydGxhc3QoMTYpOwogICAgaW5zZXJ0bGFzdCgwKTsKICAgIGluc2VydGxhc3QoMik7CiAgICBpbnNlcnRsYXN0KDgpOwoKICAgIGluc2VydGJlZm9yZSgxNSwwKTsKICAgIGRlbGV0ZWFueSg0KTsKICAgICBkZWxldGVhbnkoMTYpOwoKCgogICAgcHJpbnRmKCJwcmludCBlbGVtZW50czogIik7CiAgICBwcmludGxpc3QoKTsKCn0KCg==