//一元多项式求和
typedef struct PolyNode{
int coef;//系数
int exp;//指数
PolyNode *next;
}PolyNode,*PolyList;
//把合并后的多项式更新到pa中,并释放多余结点
PolyList Add(PolyList &pa,PolyList &pb){
PolyList p,q,pre,tmp;
p=pa->next;//p是第一个链表的工作指针
q=pb->next;//q是第二个链表的工作指针
pre=pa;//pre是p的前驱
while(p!=NULL&&q!=NULL){
if(p->exp<q->exp){//第一个指数小于第二个指数
pre=p;//p指针后移
p=p->next;
}else if(p->exp==q->exp){//第一个指数等于第二个指数
int x=p->coef+q->coef;
if(x!=0){//第一个系数不等于第二个系数
p->coef=x;//更新系数,p指针后移
pre=p;
p=p->next;
}else{//第一个系数等于第二个系数
pre->next=p->next;//删除结点p
free(p);
p=pre->next;
}
tmp=q->next;//删除结点q;
free(q);
q=tmp;
}else{//第一个指数大于第二个指数
tmp=q->next;//保存q的后继
q->next=p;//把结点q链接到pa中
pre->next=q;
pre=q;
q=tmp;
}
}
if(q!=NULL){
s->next=q;
}
free(pb);
return pa;
}