Code:
#include <iostream>
#include <stdio.h>
#include <malloc.h>
using namespace std;
const int N = 100010;
typedef int Status;
typedef struct LNode
{
int coef;
int expn;
struct LNode *next;
}
LNode, *LinkList;
void Init_LinkList(LinkList & L)
{
L = (LinkList) malloc (sizeof(LNode));
L->next = NULL;
}
void Create_B_LinkList(LinkList & L, int n)
{
LNode *r = L;
for(int i = 1; i <= n; i ++ )
{
int x, y;
cin >> x >> y;
LNode *s = (LinkList) malloc (sizeof(LNode));
s->coef = x, s->expn = y;
s->next = NULL;
r->next = s;
r = s;
}
}
void Add(LinkList & La, LinkList & Lb, LinkList & Lc)
{
LNode *p = La->next, *q = Lb->next, *r = Lc;
while(p != NULL && q != NULL )
{
LNode *s = (LinkList) malloc (sizeof(LNode));
if(p->expn < q->expn)
{
s->coef = p->coef, s->expn = p->expn;
r->next = s;
r = s;
p = p->next;
}
else if(p->expn == q->expn)
{
int sum = p->coef + q->coef;
if(sum)
{
s->coef = sum;
s->expn = p->expn;
r->next = s;
r = s;
}
p = p->next, q = q->next;
}
else
{
s->coef = q->coef, s->expn = q->expn;
r->next = s;
r = s;
q = q->next;
}
}
r->next = p ? p : q;
}
void Travers_LinkList(LinkList & L)
{
LNode *p = L->next;
while(p->next != NULL)
{
int c = p->coef;
int e = p->expn;
printf("%dX^%d+", c, e);
p = p->next;
}
printf("%dX^%d", p->coef, p->expn);
}
signed main()
{
int n, m, x;
LNode *La, *Lb, *Lc;
cin >> n;
Init_LinkList(La), Init_LinkList(Lb), Init_LinkList(Lc);
Create_B_LinkList(La, n);
Travers_LinkList(La);
cout << endl;
Create_B_LinkList(Lb, n);
Travers_LinkList(Lb);
cout << endl;
Add(La, Lb, Lc);
Travers_LinkList(Lc);
}
注:要输入的两个多项式要保持升序形式。