if (p1->expn == p2->expn) {
p1->coef = p1->coef + p2->coef;
if (p1->coef == 0) {
t = p1->next;
free(p1);
p1 = t;
} else {
p->next = p1;
p1 = p1->next;
p = p->next;
}
t = p2->next;
free(p2);
p2 = t;
} else {
t = p1->expn > p2->expn p1 : p2;
p->next = t;
p = t;
t = t->next;
p1->expn > p2->expn p1 : p2 = t;
}
}
p->next = 0;
if(p2){
p->next = p2;
}
free(b);
b = 0;
return OK;
}
Status SubPoly(Poly *a, Poly *b) {
CHECK(*a&&*b&&*a!=*b);
Poly p = (*b)->next;
while(p){
p->coef = -p->coef;
p = p->next;
}
return AddPoly(a,b);
}
Status reverse(Poly head){
CHECK(head);
Poly e = 0;
Poly p = head->next;
Poly t;
while(p){
t = p->next;
p->next = e;
e = p;
p = t;
}
head->next = e;
return OK;
}
Status multiPoly(Poly *a,Poly *b){
CHECK(*a&&*b);
Poly head,p1,p2;
CHECK(makeNode(0,0,&head));
p1 = (*a)->next;
while(p1){
p2 = (*b)->next;
while(p2){
AddNodePoly(&head,p1->coef*p2->coef,p1->expn+p2->expn);
print(head);
p2 = p2->next;
}
p1 = p1->next;
}
*a = head;
return OK;
}
int main() {
freopen("c:/in.log", "r", stdin);
Poly a = 0, b = 0;
if (createPoly(&a)) {
print(a);
}
if (createPoly(&b)) {
print(b);
}
if (SubPoly(&a, &b)) {
print(a);
}
destoryPoly(&a);
return 0;
}