#include <stdio.h>
#include <stdlib.h>
struct node
{
int value;
struct node *prev,*next;
};
typedef struct
{
struct node *head,*tail;
}List;
struct node *NewNode(int value,struct node *prev,struct node *next)
{
struct node *ret;
ret
=(struct node
*)malloc(sizeof(struct node
)); ret->value=value;
ret->prev=prev;
ret->next=next;
}
void Add(List *L,int value)
{
struct node *tmp;
tmp=NewNode(value,L->tail,NULL);
if(L->tail) L->tail->next=tmp;
else L->head=tmp;
L->tail=tmp;
}
void Show(List *L)
{
struct node *i;
for(i
=L
->head
;i
;i
=i
->next
) printf(" %d",i
->value
); }
void Del(List *L,struct node *del)
{
if(del->prev) del->prev->next=del->next;
else L->head=del->next;
if(del->next) del->next->prev=del->prev;
else L->tail=del->prev;
}
void DelEven(List *L)
{
struct node *tmp,*next;
tmp=L->head;
while(tmp)
{
next=tmp->next;
if(!(tmp->value&1)) Del(L,tmp);
tmp=next;
}
}
int main()
{
int i;
List L={NULL,NULL};
for(i=0;i<10;++i) Add(&L,i);
Show(&L);
DelEven(&L);
Show(&L);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCnN0cnVjdCBub2RlCiAgewogICBpbnQgdmFsdWU7CiAgIHN0cnVjdCBub2RlICpwcmV2LCpuZXh0OwogIH07Cgp0eXBlZGVmIHN0cnVjdAogIHsKICAgc3RydWN0IG5vZGUgKmhlYWQsKnRhaWw7CiAgfUxpc3Q7CgpzdHJ1Y3Qgbm9kZSAqTmV3Tm9kZShpbnQgdmFsdWUsc3RydWN0IG5vZGUgKnByZXYsc3RydWN0IG5vZGUgKm5leHQpCiAgewogICBzdHJ1Y3Qgbm9kZSAqcmV0OwogICByZXQ9KHN0cnVjdCBub2RlKiltYWxsb2Moc2l6ZW9mKHN0cnVjdCBub2RlKSk7CiAgIHJldC0+dmFsdWU9dmFsdWU7CiAgIHJldC0+cHJldj1wcmV2OwogICByZXQtPm5leHQ9bmV4dDsKICB9Cgp2b2lkIEFkZChMaXN0ICpMLGludCB2YWx1ZSkKICB7CiAgIHN0cnVjdCBub2RlICp0bXA7CiAgIHRtcD1OZXdOb2RlKHZhbHVlLEwtPnRhaWwsTlVMTCk7CiAgIGlmKEwtPnRhaWwpIEwtPnRhaWwtPm5leHQ9dG1wOwogICBlbHNlIEwtPmhlYWQ9dG1wOwogICBMLT50YWlsPXRtcDsKICB9CiAgCnZvaWQgU2hvdyhMaXN0ICpMKQogIHsKICAgc3RydWN0IG5vZGUgKmk7CiAgIGZvcihpPUwtPmhlYWQ7aTtpPWktPm5leHQpIHByaW50ZigiICVkIixpLT52YWx1ZSk7CiAgIHByaW50ZigiXG4iKTsKICB9CiAgCnZvaWQgRGVsKExpc3QgKkwsc3RydWN0IG5vZGUgKmRlbCkKICB7CiAgIGlmKGRlbC0+cHJldikgZGVsLT5wcmV2LT5uZXh0PWRlbC0+bmV4dDsKICAgZWxzZSBMLT5oZWFkPWRlbC0+bmV4dDsKICAgaWYoZGVsLT5uZXh0KSBkZWwtPm5leHQtPnByZXY9ZGVsLT5wcmV2OwogICBlbHNlIEwtPnRhaWw9ZGVsLT5wcmV2OwogIH0KICAKdm9pZCBEZWxFdmVuKExpc3QgKkwpCiAgewogICBzdHJ1Y3Qgbm9kZSAqdG1wLCpuZXh0OwogICB0bXA9TC0+aGVhZDsKICAgd2hpbGUodG1wKQogICAgIHsKICAgICAgbmV4dD10bXAtPm5leHQ7CiAgICAgIGlmKCEodG1wLT52YWx1ZSYxKSkgRGVsKEwsdG1wKTsKICAgICAgdG1wPW5leHQ7CiAgICAgfQogIH0KICAKaW50IG1haW4oKQogIHsKICAgaW50IGk7CiAgIExpc3QgTD17TlVMTCxOVUxMfTsKICAgZm9yKGk9MDtpPDEwOysraSkgQWRkKCZMLGkpOwogICBwcmludGYoIlByemVkOlxuIik7CiAgIFNob3coJkwpOwogICBEZWxFdmVuKCZMKTsKICAgcHJpbnRmKCJQbzpcbiIpOwogICBTaG93KCZMKTsKICAgcmV0dXJuIDA7CiAgfQ==