请C语言高手看看帮帮忙,谢谢!

程序要求是这样的,把链表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;
}

不知道你的链表是怎么定义的,但问题应该出自while(p->next!=head)这个上,因为初始化p指向HEAD,如果程序运行过程中不特殊处理其下一个应该永远不能指向HEAD,应该是while(p->next)或while(p->next!=NULL) .
上次没仔细看这个程序,现在看了一下没有看懂,感觉问题较多,如:
if(p->value>='1'&& p->value<='9')
{
num++;
if(num==1) number=p;
else pn->next=p1;
pn=p1;
}

后面又有:
if(p->value>='1' && p->value<='9'){
num++;
if(num==1) number=p;
else pn->next=p;
pn=p;
}
这后面的那个语句永远都不会执行。
至于出现死循环,如果真如你所说,是个循环链表,则不应该,应该是这个链表自身管理有问题,没有形成循环才会出现死循环。
温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答
大家正在搜