Aizu ALDS1_3_C Doubly Linked List
#include<bits/stdc++.h>
using namespace std;
struct nod{
int key;
nod *prev, *next;
};
nod *nil;
void init(){
nil=(nod *)malloc(sizeof(nod));
nil->prev=nil;
nil->next=nil;
}
void inser(int n){
nod *x=(nod *)malloc(sizeof(nod));
x->key=n;
x->next=nil->next;
nil->next->prev=x;
nil->next=x;
x->prev=nil;
}
nod* nodsearch(int k){
nod *cur=nil->next;
while(cur!=nil&&cur->key!=k){
cur=cur->next;
}
return cur;
}
void deletnod(nod *x){
if(x==nil)return;
x->prev->next = x->next;
x->next->prev = x->prev;
free(x);
}
void delet(int k){
deletnod(nodsearch(k));
}
void deletfirst(){
deletnod(nil->next);
}
void deletlast(){
deletnod(nil->prev);
}
void printlist(){
nod *cur=nil->next;
while(cur!=nil){
if(cur->prev!=nil){printf(" ");}
printf("%d",cur->key);
cur=cur->next;
}
printf("\n");
}
int main()
{
int n,x;
char s[10];
scanf("%d",&n);
init();
while(n--){
scanf("%s",s);
if(strlen(s)<8){scanf("%d",&x);}
if(s[0]=='i'){inser(x);}
else if(s[0]='d'){
if(s[6]=='F'){deletfirst();}
else if(s[6]=='L'){deletlast();}
else{delet(x);}
}
}
printlist();
return 0;
}