思路:将两个多项式从头扫描,指数相同项相加,如果为0则释放该空间,如果非0则构成一项,最终指数不同的项按指数升序排列。 用变量p、q分别指向链A、B中的第一结点,把结果存放在A中。若p->next < q->next 说明p是其中一项,p后移;若p->next > q->next 说明q是其中一项,q后移。
void polyadd(Polylist a, Polylist b){ Polynode *p=a->next, *q=b->next, *tail=a; while(p!=NULL&&q!=NULL){ if(p->exp<q->exp){ //尾插p tail->next=p; tail=p; p=p->next; }else if(p->exp==q->exp){ if((sum=p->coef+q->coef)!=0){ p->coef=sum; //尾插 tail->next=p; tail=p; p=p->next; //删除q temp=q; q=q->next; free(temp); }else{ temp=p; p=p->next; free(temp); temp=q; q=q->next; free(temp); } }else if(p->exp>q->exp){ //尾插q tail->next=q; tail=q; q=q->next; } } //A B还有剩 if(p) pre->next=p; else pre->next =q; }