#include
#include
typedef int ElemType;//元素类型
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
LinkList linkList(){//初始化链表
LinkList p;
p=(LNode *)malloc(sizeof(LNode));
p->next=NULL;
return p;
}
int creatList(LNode *a)//创建链表
{
LinkList p=a;
while(p->next!=NULL) p=p->next;
p->next=(LNode *)malloc(sizeof(LNode));
if(p->next==NULL) return 0;
p=p->next;
scanf("%d",&p->data);
p->next=NULL;
return 1;
}
int insertList(LinkList p,int i,ElemType b)//插入链表一个节点
{
LinkList f;int a=1;
p=p->next;
while(p!=NULL&&a
a++;
if(a==i) break;
p=p->next;
}
if(p!=NULL)
{
f=p->next;
p->next=(LNode *)malloc(sizeof(LNode));
p=p->next;
p->data=b;
p->next=f;
return 1;
}
return 0;
}
int deleteList(LinkList head,int i)//删除链表中的一个节点
{
LinkList f,p;
int a=1;p=head;
while(p->next!=NULL&&a
p=p->next;
a++;
}
if(p->next!=NULL&&a==i){
f=p->next;
p->next=f->next;
free(f);//在删除偶数节点函数执行的时候有这一句就错误
return 1;
}
return 0;
}
void deleteOdd(LinkList p)//删链表中的偶数节点
{
LinkList head=p;
int i=1;
p=p->next;
while(p!=NULL)
{
if((p->data%2)==0){
deleteList(head,i);}
else i++;
p=p->next;
}
}
void displayList(LNode *p){//显示链表中的数据
p=p->next;
while(p)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
int main()
{
int k;int i,j;
LinkList p=linkList();//初始化一个链表
for(i=0;i<5;i++)//创建一个链表
creatList(p);
/*for(int j=0;j<5;j++)
{
scanf("%d",&k);
deleteList(p,k);
displayList(p);
}*/
deleteOdd(p);//删除偶数节点
displayList(p);//显示
return 0;
}