void Insert(Polyn p,Polyn head){
if(p->coef==0)
free(p); //若p的系数为0则释放结点
else
{
Polyn q1,q2;
q1=head;
q2=head->next;
while(q2&& p->expn > q2->expn)
{ //查找p的插入位置
q1=q2; //确定输出的多项式为升幂排列
q2=q2->next;
}
if(q2&& p->expn == q2->expn)
{ //若输入的指数相同,则合并同类项
q2->coef += p->coef;
free(p);
if(q2->coef==0) //q2项系数为0时,直接插入
{
q1->next=q2->next;
free(q2);
}
}
else
{ //指数为新时将结点插入
p->next=q2;
q1->next=p;
}
}
}
不知道你是哪里转不过弯?注释的挺清楚的啊.
1.首先while循环找到待插入的位置
2.判断找到的位置的expn和p的expn是不是一样的,一样的话系数相加就好(如果相加以后变成0了就删除掉这个项)
3.原来的多项式没有和待插入的p的expn一样的,说明待插入的p的expn是最大的,直接在多项式尾部插入p