【问题描述】输人若干个正整数(输入-1 为结束标志),并建立个单向链表,将其中的偶数值结点删除后输出。试编写相应程序。
【样例输入】
1 2 3 4 5 6 7 -1
【样例输出】
1 3 5 7
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct zhengshu{
int n;
struct zhengshu *next;
};
//新建链表
struct zhengshu *Creat(void);
//遍历链表
void Print(struct zhengshu *head);
//删除结点
struct zhengshu *Delete(struct zhengshu *head);
int main()
{
struct zhengshu *head;
head=Creat();
head=Delete(head);
Print(head);
}
//新建链表
struct zhengshu *Creat(void){
struct zhengshu *head,*tail,*p;
int num;
int size=sizeof(struct zhengshu);
head=tail=NULL;
scanf("%d",&num);
while (num!=-1) {
p=(struct zhengshu*)malloc(size);
p->n=num;
p->next=NULL;
if (head==NULL)
head=p;
else
tail->next=p;
tail=p;
scanf("%d",&num);
}
return head;
}
//删除结点
struct zhengshu *Delete(struct zhengshu *head)
{
struct zhengshu *p1 = NULL,*p;
p1=head;
for (p=head;p!=NULL;p=p->next){
if ((p->n)%2==0) {
if(p==head){
head=p->next;
free(p);}
else{
p1->next=p->next;
free(p);}
}
else
p1=p;
}
return head;
}
//遍历链表
void Print(struct zhengshu *head)
{
struct zhengshu *ptr;
ptr=head;
while (ptr!=NULL) {
printf("%d ",ptr->n);
free(ptr);
ptr=ptr->next;
}
}