程序要求是这样的,把链表head中的数字,字母和其他字符分别装入三个新链表中,可运行输出时是无限循环,请帮忙看看问题出在哪
void sub(struct code *head,struct code *number,struct code *letter,struct code *other)
{
struct code *p,*pn,*pl,*po,*p1;
int num,let,oth;
num=let=oth=0;
p=head;
pn=pl=po=(struct code *)malloc(LEN);
while(p->next!=head)
{
p1=(struct code *)malloc(LEN);
p1->value=p->value;
if(p->value>='1'&& p->value<='9')
{
num++;
if(num==1) number=p;
else pn->next=p1;
pn=p1;
}
else if(p->value>='a' && p->value<='z')
{
let++;
if(let==1) letter=p;
else pl->next=p1;
pl=p1;
}
else{
oth++;
if(oth==1) other=p;
else po->next=p1;
po=p1;
}
p=p->next;
}
if(p->value>='1' && p->value<='9'){
num++;
if(num==1) number=p;
else pn->next=p;
pn=p;
}
else if(p->value>='a' && p->value<='z')
{
let++;
if(let==1) letter=p;
else pl->next=p;
pl=p;
}
else
{
oth++;
if(oth==1) other=p;
else po->next=p;
po=p;
}
pl->next=letter;
pn->next=number;
po->next=other;
}