标题:[原创]链表的排序实现
取消只看楼主
韦应贵
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2006-4-30
 问题点数:0 回复次数:2 
[原创]链表的排序实现

请那位高人看看我的这个链表排序,下面我以蓝色标出的地方运行出错.
出现的错误是:相加后的结果会再加一次,这是怎么回事呀
void sort(struct term *La)
{ struct term *p,*q,*s,*r;
for(p=La->next;p;p=p->next)
{ for(q=p->next;q;q=q->next)
{if(p->expn>q->expn)
{s=(struct term*)malloc(sizeof(struct term));
s->coef=q->coef;
s->expn=q->expn;
s->next=NULL;
q->coef=p->coef;
q->expn=p->expn;
p->coef=s->coef;
p->expn=s->expn;}
else
if(p->expn==q->expn)
{s=(struct term*)malloc(sizeof(struct term));
s->coef=p->coef+q->coef;
s->expn=q->expn;
s->next=NULL;
r->next=(struct term*)malloc(sizeof(struct term));
r->coef=p->coef;
r->expn=p->expn;
r->next=NULL;
free(r);
p->coef=s->coef;
p->expn=s->expn;
free(s);
}
}
}

搜索更多相关主题的帖子: 链表 
2006-05-07 17:31
韦应贵
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2006-4-30
得分:0 
如果我把以上程序的 else
if(p->expn==q->expn)
{s=(struct term*)malloc(sizeof(struct term));
s->coef=p->coef+q->coef;
s->expn=q->expn;
s->next=NULL;
r->next=(struct term*)malloc(sizeof(struct term));
r->coef=p->coef;
r->expn=p->expn;
r->next=NULL;
free(r);
p->coef=s->coef;
p->expn=s->expn;
free(s);
去掉,它就会正确.我用的S结点只是个临时结点,做交换数据用的.
2006-05-07 22:11
韦应贵
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2006-4-30
得分:0 
但是不用临时结点时,改变链表关系,出来的结果和这个是一样的,那么是你的算法出错了?楼的大哥,你能改改吗?
2006-05-08 21:02



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-62399-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 2.300596 second(s), 10 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved