现在用带头节点的单链表来存储多项式,链表中的一个节点表示多项式的一项,
节点中coef表示多项式的系数,exp表示多项式的次数,例如5x8用一个节点表
示时,该节点的coef成员值为5,exp值为8。
请设计void polyAdd(PolyList LA, PolyList LB,PolyList LC)函数。
参数:LA,LB指向的链表是带头节点的单链表,链表中的每个数据
节点表示多项式的一项,数据节点已经按指数从大到小排序。
LC指向一个空的带头节点的链表,表示空的多项式。
该函数用来对多项式LA和LB相加,结果保存在多项式LC指向的单链表中。
请注意,本题有预置代码,只需提交所要求的函数定义代码即可。
void polyAdd(PolyList LA, PolyList LB,PolyList LC)
{
int sum;
LA=LA->next;
LB=LB->next;
while(LA!=NULL&&LB!=NULL){
if(LA->exp>LB->exp){
LC->next=LA;
LC=LA;
LA=LA->next;
}
if(LA->expexp){
LC->next=LB;
LC=LB;
LB=LB->next;
}
if(LA->exp==LB->exp){
sum=LA->coef+LB->coef;
if(sum!=0){
LC->next->coef=sum;
LC->next->exp=LA->exp;
LC=LC->next;
LA=LA->next;
LB=LB->next;
}
else{
LA=LA->next;
LB=LB->next;
}
}
}
if(LA!=NULL){
LC->next=LA;
}
if(LB!=NULL){
LC->next=LB;
}
if(LA==NULL&&LB==NULL){
LC->next=NULL;
}
}
Error:Segmentation
while循环中,应该用if else if else语句,不是if if if,如下:
void polyAdd(PolyList LA, PolyList LB, PolyList LC)
{
int sum;
LA = LA->next;
LB = LB->next;
while (LA != NULL && LB != NULL) {
if (LA->exp > LB->exp) {
LC->next = LA;
LC = LA;
LA = LA->next;
}
else if (LA->exp < LB->exp) {
LC->next = LB;
LC = LB;
LB = LB->next;
}
else {
sum = LA->coef + LB->coef;
if (sum != 0) {
LC->next->coef = sum;
LC->next->exp = LA->exp;
LC = LC->next;
LA = LA->next;
LB = LB->next;
}
else {
LA = LA->next;
LB = LB->next;
}
}
}
if (LA != NULL) {
LC->next = LA;
}
if (LB != NULL) {
LC->next = LB;
}
if (LA == NULL && LB == NULL) {
LC->next = NULL;
}
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!