为什么符合条件的头结点没有删除?求解决!
为什么删除不了偶数数据的头结点?
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define LEN sizeof(struct Shuju)
struct Shuju
{
int num;
struct Shuju* next;
};
struct Shuju* creat(void)
{
srand((unsigned)time(NULL));
struct Shuju*head;
struct Shuju*p1,*p2;
int n=0;
p1=p2=(struct Shuju*)malloc(LEN);
p1->num=rand()%100;
head=NULL;
while(n<10)
{
n=n+1;
if(n==1)
head=p1;
else
p2->next=p1;
p2=p1;
p1=(struct Shuju*)malloc(LEN);
p1->num=rand()%100;
}
p2->next=NULL;
return(head);
}
int print(struct Shuju* head)
{
struct Shuju*p;
p=head;
if(head!=NULL)
{
do
{
printf("%3d",p->num);
p=p->next;
}while(p!=NULL);
}
printf("\n");
return 0;
}
struct Shuju* del(struct Shuju* head)//删除偶数数据结点
{
struct Shuju* p;
struct Shuju* q;
q=p=head;
if(head==NULL)
return 0;
while(p!=NULL)//不为空进入循环
{
if(p->num%2==0)//为偶
{
if(p==head)//头数据是偶,删头
{
head=head->next;//头结点下一节点
q=p=head;//p,q指向新的头结点
}
else
{
q->next=p->next;//q指向下一节点
p=p->next;//p指向下一结点
}
}
else
{
q=p;//q保存p的结点地址
p=p->next;//p指向下一结点
}
}
return head;
}
int main()
{
struct Shuju*pt;
pt=creat();
printf("初始的10个整数:\n");
print(pt);
pt=del(pt);//删偶数据节点
printf("去偶后的整数:\n");
print(pt);
return 0;
}
[ 本帖最后由 小小战士 于 2012-11-24 15:10 编辑 ]