PolyNode* MultPoly(PolyNode* p1, PolyNode* p2)
{
assert(p1 && p2);
PolyNode* p = NULL;
p = (PolyNode*)malloc(sizeof(PolyNode));
if (p == NULL)
{
exit(1);
}
PolyNode* start = p;
PolyNode* trav = p;
PolyNode* end = p;
PolyNode* newp = p2;
for (newp = p2; newp; newp = newp->link)
{
CrePolyNode((p1->coef)*(newp->coef),(p1->index)+(newp->index), &end);
}
p1 = p1->link;
for (; p1; p1 = p1->link)
{
for (newp = p2; newp; newp = newp->link)
{
p = (PolyNode*)malloc(sizeof(PolyNode));
if (p == NULL)
{
exit(1);
}
p->coef = (p1->coef) * (newp->coef);
p->index = (p1->index) + (newp->index);
PolyNode* pre = start;
trav = start->link;
while (trav != NULL && trav->index > p->index)
{
pre = trav;
trav = trav->link;
}
if (trav == NULL)
{
end->link = p;
end = p;
}
else
{
if (trav->index == p->index)
{
trav->coef = (trav->coef) + (p->coef);
free(p);
p = NULL;
}
else
{
p->link = trav;
pre->link = p;
}
}
}
}
start = start->link;
return start;
}