如何用链表实现多项式相加

请问要怎么完善下面的代码实现多项式相加


#include
#include

 typedef struct PNode
 {
     float cofe;
     int   expn;
     struct PNode *next
 }

 void CreatePolyn(Polynomial &P,int n)
 {
     P=new PNode;
     P->next=NULL;
     for(i=1;i<=n;++i)
     {
         s=new PNode;
         cin>>s->cofe>>s->expn;
         pre=P;
         q=P->next;
         whiel(q&&q-.expnexpn)
         {
             pre=q;
             q=q->next;
         }
         s->next=q;
         pre->next=s;
     }
 }

 void AddPolyn(Polynomial &Pa,Polynomial &Pb)
 {
     p1=Pa->next;
     p2=Pb->next;
     p3=Pa;
     while(p1&&p2)
     {
         if(p1->expn==p2->expn)
         {
             sum=p1->coef+p2->coef;
             if(sum!=0)
             {
                 p1->coef=sum;
                 p3->next=p1;
                 p3=p1;
                 p1=p1->next;
                 r=p2;
                 p2=p2->next;
                 delete r;

             }
             else
             {
                 r=p1;
                 p1=p1->next;
                 delete r;
                 r=p2;
                 p2=p2->next;
                 delete r;

             }


             }
             else if(p1->expnexpn)
             {
                 p3->next=p1;
                 p3=p1;
                 p1=p1->next;
             }
             else
             {
                 p3->next=p2;
                 p3=p2;
                 p2=p2->next;
             }
         }
         p3->next=p1?p1:p2;
         delete Pb;
     }

int main
{
    
}

仅供参考:


//链表实现一元多项式的加法减法
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
    float  coef;   //系数
    int    expn;   //指数
    struct node *next;
} PolyNode;
typedef PolyNode* Polynomial;
Polynomial createPolynomial() {  //创建多项式
    PolyNode *p, *q, *head = (PolyNode *)malloc(sizeof(PolyNode));
    head->next = NULL;
    float coef;
    int expn;
    printf("输入该多项式每一项的系数和指数,每项一行,输入0 0结束!\n");
    while (1) {
        scanf("%f %d", &coef, &expn);
        if (0.0==coef && 0==expn) break;
        if (head->next) {
            p = head;
            while (p->next && expn < p->next->expn) p = p->next;
            if (p->next) {
                if (expn == p->next->expn) { //有相同指数的直接把系数加到原多项式
                    p->next->coef += coef;
                    if (-0.00001f < p->next->coef && p->next->coef < 0.00001f) { //若是相加后系数为0,则舍弃该节点
                        q = p->next;
                        p->next = q->next;
                        free(q);
                    }
                } else {
                    q       = (PolyNode*)malloc(sizeof(PolyNode));
                    q->coef = coef;
                    q->expn = expn;
                    q->next = p->next;
                    p->next = q;
                }
            } else {
                p->next = (PolyNode*)malloc(sizeof(PolyNode));
                p       = p->next;
                p->coef = coef;
                p->expn = expn;
                p->next = NULL;
            }
        } else {
            head->next       = (PolyNode*)malloc(sizeof(PolyNode));
            head->next->coef = coef;
            head->next->expn = expn;
            head->next->next = NULL;
        }
    }
    return head;
}
Polynomial polyAdd(Polynomial poly1, Polynomial poly2) { //多项式相加 poly1+poly2形成一个新的多项式
    Polynomial poly = (PolyNode*)malloc(sizeof(PolyNode));  //和多项式的头节点
    poly->next = NULL;
    PolyNode *p, *q, *r;
    r = poly;
    p = poly1->next;
    q = poly2->next;
    while (p&&q) {
        if (p->expn > q->expn) {
            r->next = (PolyNode*)malloc(sizeof(PolyNode));
            r       = r->next;
            r->coef = p->coef;
            r->expn = p->expn;
            p       = p->next;
        } else if (p->expn < q->expn) {
            r->next = (PolyNode*)malloc(sizeof(PolyNode));
            r       = r->next;
            r->coef = q->coef;
            r->expn = q->expn;
            q       = q->next;
        } else {
            float m = p->coef + q->coef;
            if (!(-0.00001f <m && m < 0.00001f)) {
                r->next = (PolyNode*)malloc(sizeof(PolyNode));
                r       = r->next;
                r->coef = m;
                r->expn = p->expn;
            }
            q = q->next;
            p = p->next;
        }
    }
    while (p) {
        r->next = (PolyNode*)malloc(sizeof(PolyNode));
        r       = r->next;
        r->coef = p->coef;
        r->expn = p->expn;
        p       = p->next;
    }
    while (q) {
        r->next = (PolyNode*)malloc(sizeof(PolyNode));
        r       = r->next;
        r->coef = q->coef;
        r->expn = q->expn;
        q       = q->next;
    }
    r->next = NULL;
    return poly;
}
Polynomial polySubtract(Polynomial poly1, Polynomial poly2) {  //多项式减法 poly1-poly2形成一个新的多项式
    //把poly2的系数取相反数,形成一个新的多项式
    Polynomial poly = (PolyNode*)malloc(sizeof(PolyNode)); //构造头节点
    PolyNode *p, *q;
    p = poly;
    q = poly2->next;
    while (q) {
        p->next = (PolyNode*)malloc(sizeof(PolyNode));
        p       = p->next;
        p->coef = -(q->coef);  //系数取反
        p->expn = q->expn;
        q       = q->next;
    }
    p->next = NULL;
    Polynomial poly3 = polyAdd(poly1, poly);  //利用加法
    return poly3;
}
void printPoly(Polynomial poly) {  //打印多项式
    if (poly && poly->next) {
        PolyNode *p = poly->next;  //p指向第一个节点
        while (p->next) {
            if (1!=p->expn) printf("%g X^%d", p->coef, p->expn);
            else            printf("%g X"   , p->coef         );
            p = p->next;
            if (p) {
                if (p->coef > 0) printf(" +");
                else             printf(" ");
            }
        }
        if (p->expn == 0)
            printf("%g", p->coef);   //打印常数项
        else {
            if (1!=p->expn) printf("%g X^%d", p->coef, p->expn);
            else            printf("%g X"   , p->coef         );
        }
        printf("\n");
    } else {
        printf("0\n");
    }
}
void freePoly(Polynomial poly) {  //释放内存
    if (poly && poly->next) {
        PolyNode *p, *q;
        p = poly;
        while (p) {
            q = p->next;
            free(p);
            p = q;
        }
    }
    poly = NULL;
}
int main() {
    printf("用链表实现多项式的加减法\n");
    Polynomial poly1, poly2, poly3;

    printf("创建多项式一\n");
    poly1 = createPolynomial();

    printf("创建多项式二\n");
    poly2 = createPolynomial();

    printf("          多项式一:");printPoly(poly1);
    printf("          多项式二:");printPoly(poly2);

    poly3 = polyAdd(poly1, poly2);
    printf("两多项式相加,和为:");printPoly(poly3);
    freePoly(poly3);

    poly3 = polySubtract(poly1, poly2);
    printf("两多项式相减,差为:");printPoly(poly3);
    freePoly(poly3);

    freePoly(poly2);
    freePoly(poly1);
    system("pause");
    return 0;
}
//用链表实现多项式的加减法
//创建多项式一
//输入该多项式每一项的系数和指数,每项一行,输入0 0结束!
//4 9
//3 6
//2 5
//0 0
//创建多项式二
//输入该多项式每一项的系数和指数,每项一行,输入0 0结束!
//4 9
//3 6
//2 5
//0 0
//        多项式一:4 X^9 +3 X^6 +2 X^5
//        多项式二:4 X^9 +3 X^6 +2 X^5
//两多项式相加,和为:8 X^9 +6 X^6 +4 X^5
//两多项式相减,差为:0
//请按任意键继续. . .