一元多项式相加
struct PolyNode{
int coef;
int exp;
struct PolyNode *next;
};
typedef struct PolyNode *Polynomial;
Polynomial P1,P2;
Polynomial PolyAdd(Polynomial P1,Polynomial P2){
Polynomial front,rear,temp;
int sum;
rear=(Polynomial)malloc(sizeof(struct PolyNode));
while(P1&&P2){
switch(Compare(P1->coef,P2->coef){
case 1:
Attach(P1->coef,P1->exp,&rear);
P1=P1->next;
break;
case -1:
Attach(P2->coef,P2->exp,&rear);
P2=P2->next;
break;
case 0:
sum=P1->coef+P2->coef;
if(sum) Attach(sum,P1->exp,&rear);
P1=P1->next;
P2=P2->next;
break;
}
}
for(;P1;P1=P1->next) Attach(P1->coef,P1->exp,&rear);
for(;P2;P2=P2->next) Attach(P2->coef,P2->exp,&rear);
rear->next=NULL;
temp=front;
front=front->next;
free(temp);
return front;
}
void Attach(int c,int e,Polynomial *pRear){
Polynomial P;
P=(Polynomial)malloc(sizeof(struct Polynomial));
P->coef=c;
P->expon=e;
P->next=NULL;
(*pRear)->next=P;
*pRear=P;
}