试编写算法,键盘输入一组元素,以0做结束输入的标记,建立一个带头结点的单向链表(无序,且值域为整型),在单向链表中删除所有的偶数元素结点。
输入:-11 5 9 8 7 3 1 0
输出:-11 5 9 7 3 1
#include <stdio.h>
#include <stdlib.h>
typedef struct LinkList
{
int data;
struct LinkList *next;
}LNode;
//创建头结点
LNode *Head()
{
LNode *p=(LNode *)malloc(sizeof(LNode));
p->next=NULL;
return p;
}
//增加结点
void Add(LNode *p)
{
LNode *q=NULL;
while(1)
{
q=(LNode *)malloc(sizeof(LNode));
scanf("%d",&q->data);
if(q->data==0) break;
q->next=NULL;
p->next=q;
p=p->next;
}
}
//删除偶结点
void DeleteEven(LNode *L)
{
LNode *p=NULL;
LNode *q=NULL;
p=L;
q=p->next;
while(q!=NULL)
{
if(q->data%2==0) {p->next=q->next;free(q);q=p->next;}
else{ p=p->next;q=q->next;}
}
}
//输出链表
void Print(LNode *p)
{
p=p->next;
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
}
int main()
{
LNode *p=NULL;
p=Head();
Add(p);
printf("删除前:\n");
Print(p);
printf("\n 删除后:\n");
DeleteEven(p);
Print(p);
//printf("Hello world!\n");
return 0;
}