You are on page 1of 3

void inputLinkTerms(linkedPolynomialTerm*& polyPtr, int coef, int expo)

{
linkedPolynomialTerm* tmpPtr;
linkedPolynomialTerm* pre = nullptr;
linkedPolynomialTerm* cur = polyPtr;

tmpPtr = new linkedPolynomialTerm;


tmpPtr->coef = coef;
tmpPtr->expo = expo;
tmpPtr->nextTermPtr = nullptr;

if (polyPtr == nullptr)
{
if (tmpPtr->coef == 0)
return;
polyPtr = tmpPtr;
return;
}
while (expo < cur->expo)
{
if (cur->nextTermPtr == 0)
{
if (tmpPtr->coef == 0)
return;
cur->nextTermPtr = tmpPtr;
return;
}
else
{
pre = cur;
cur = cur->nextTermPtr;
}
}

if (cur->expo == expo)
{
cur->coef = coef;
if (cur->coef == 0)
{
if (pre != nullptr)
pre->nextTermPtr = cur->nextTermPtr;
else
polyPtr = cur->nextTermPtr;
}
return;
}

if (tmpPtr->coef == 0)
return;

if (pre != nullptr)
{
tmpPtr->nextTermPtr = cur;
pre->nextTermPtr = tmpPtr;
}
else
{
tmpPtr->nextTermPtr = cur;
polyPtr = tmpPtr;
}
return;
}

linkedPolynomialTerm* addLinkBasedPoly(linkedPolynomialTerm* aPtr,


linkedPolynomialTerm* bPtr)
{
linkedPolynomialTerm* dPtr = nullptr;

if (aPtr == nullptr && bPtr == nullptr)


return 0;

if (aPtr != nullptr && bPtr == nullptr)


{
dPtr = new linkedPolynomialTerm;
dPtr->coef = aPtr->coef;
dPtr->expo = aPtr->expo;

dPtr->nextTermPtr = addLinkBasedPoly(aPtr->nextTermPtr, bPtr);


}
else if (aPtr == nullptr && bPtr != nullptr)
{
dPtr = new linkedPolynomialTerm;
dPtr->coef = bPtr->coef;
dPtr->expo = bPtr->expo;

dPtr->nextTermPtr = addLinkBasedPoly(aPtr, bPtr->nextTermPtr);


}
else if (aPtr->expo > bPtr->expo)
{
dPtr = new linkedPolynomialTerm;
dPtr->coef = aPtr->coef;
dPtr->expo = aPtr->expo;

dPtr->nextTermPtr = addLinkBasedPoly(aPtr->nextTermPtr, bPtr);


}
else if (aPtr->expo < bPtr->expo)
{
dPtr = new linkedPolynomialTerm;
dPtr->coef = bPtr->coef;
dPtr->expo = bPtr->expo;

dPtr->nextTermPtr = addLinkBasedPoly(aPtr, bPtr->nextTermPtr);


}
else if (aPtr->expo == bPtr->expo)
{
if (aPtr->coef + bPtr->coef == 0)
{
dPtr = addLinkBasedPoly(aPtr->nextTermPtr, bPtr->nextTermPtr);
}
else
{
dPtr = new linkedPolynomialTerm;
dPtr->expo = aPtr->expo;
dPtr->coef = aPtr->coef + bPtr->coef;
dPtr->nextTermPtr = addLinkBasedPoly(aPtr->nextTermPtr, bPtr-
>nextTermPtr);
}
}

return dPtr;
}

You might also like