struct PolyNode{ int coef;//系数 int expon;//指数 struct PolyNode *link;//指向下一个结点的指针 }; 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)); front=rear;//由front记录结果多项式链表头结点 while(P1&&P2)//当两个多项式都有非零项待处理时 switch(Compare(P1->expon,P2->expon)){ /*第一个值大*/ case 1: Attach(P1->coef,P1->expon,&rear); P1=P1->link; break; /*第二个值大*/ case -1: Attach(P2->coef,P2->expon,&rear); P2=P2->link; break; /*两个值相等*/ case 0: sum=P1->coef+P2->coef; if(sum)Attach(sum,P1->expon,&rear); P1=P1->link; P2=P2->link; break; } //当while退出时,P1、P2有一个为空。 //将未处理完的另一个多项式的所有结点依次复制到结果多项式中去 for(;P1;P1=P1->link)Attach(P1->coef,P1->expon,&rear);//P1不空 for(;P2;P2=P2->link)Attach(P2->coef,P2->expon,&rear);//P2不空 rear->link=NULL; temp=front; front=front->link;//令front指向结果多项式第一个非零项 free(temp);//释放临时空表头结点 return front; } void Attach(int c,int e,Polynomial *pRear)//*pRear是指针的指针 { Polynomial P; P=(Polynomial)malloc(sizeof(struct PolyNode)); P->coef=c;//对新结点赋值 P->expon=e; P->link=NULL; (*pRear)->link=P; *pRear=P;//修改pRear的值 }