//多项式加法
struct node
{
int coef; //系数
int expn; //指数
node* next; //
};
void attach(int c,int e,node* &p)
{//在p接点的后面增加一个新节点,令p指向新节点
//在新节点的系数字段c,指数字段为e
node temp = new node();
temp.coef = c;
temp.expn = e;
p->next = temp;
p = temp;
}
//两个多项式相加
//ha,hb : 第1,2个多项式
//hc相加后的多项式
void addpolyn(node* ha,node* hb,node* &hc)
{
node* pa,pb,pc;
hc = new node();
pa = ha->next;
pb = hb->next;
pc = hc;
while((pa != NULL) && (pb != NULL))
{//当两个多项式都不为空时候
if(pa->expn == pb->expn)
{//如果两者的指数相同
int temp = pa->coef + pb->coef;
if(temp != 0)
{//如果相加不为0,新建一个node节点
attach(temp,pa->expn,pc);
}
else
{//如果为0就什么都不做
}
pa = pa->next;
pb = pb->next;
}
else if(pa->expn < pb->expn)
{//如果pa的指数比较小,把pc后面加上pa的内容
attach(pa->coef,pa->expn,pc); //重新分配内容的方法
pa++
}
else
{//如果pb的指数比较小
attach(pb->coef,pb->expn,pc);
pb++
}
}
//如果pa,pb至少有一个为空
if(pa != NULL) //直接连接的方法
{
pc.next = pa;
}
if(pb != NULL)
{
pc.next = pb;
}
}