算法思路:两个指针P1和P2分别指向这两个多项式第一个节点,不断循环:

  • P1->expon==P2->expon:系数相加,若结果不为0,则作为结果多项式对应项的系数。同时,P1和P2都分别指向下一项;
  • P1->expon>P2->expon:将P1的当前项存入结果多项式,并使P1指向下一项;
  • P1->expon<P2->expon:将P2的当前项存入结果多项式,并使P2指向下一项;

当某一多项式处理完时,将另一个多项式的所有节点依次复制到结果多项式中去。

算法:

1 Polynomial  PolyAdd(Polynomial P1,Polynomial P2)
 2 {
 3 Polynomial front,rear,temp;
 4 int sum;
 5 rear=(Polynomial)malloc(sizeof(struct Polynomial));
 6 front=rear;
 7 while(P1&&P2)
 8 {
 9 switch(Compare(P1->expon,P2->expon)){
10 case 1:
11           Attach(P1->coef,P1->expon,&rear);
12           P1=P1->link;
13           break;
14 case -1:
15            Attach(P1->coef,P1->expon,&rear);
16           P1=P1->link;
17           break;
18 csae 0:
19           sum=P1->coef+P2->coef;
20           if(sum) Attach(sum,P1->expon,&rear);
21           P1=P1->link;
22           P2=P2->link;
23          break;
24      }
25 for(;P1: P1=P1->link;) Attach(P1->coef,P1->expon,&rear);
26 for(;P2: P2=P2->link;) Attach(P2->coef,P2->expon,&rear);
27 rear->link=NULL;
28 temp=front;
29 front=front->link;
30 free(temp);
31 return front;
32 }

Attach实现:

1 void  Attach(int c,int e,Polynomial *pRear)
 2 {
 3     Polynomial P;
 4     P=(Polynomial)malloc(sizeof(struct Polynomial));
 5     P->coef=c;
 6     P->expon=e;
 7     P->link=NULL:
 8     (*pRear)->link=P;
 9     *pRear=p;
10 }
11

数据结构:

1 struct PolyNode{
2     int ceof;
3     int  expon;
4     struct PolyNode *link;
5 }
6 typedef struct PolyNode *Polynomial;
7 Polynomial P1,P2;