Multiplication of two polynomials using Linked list
Given two polynomials in the form of linked list. The task is to find the multiplication of both polynomials.
Examples:
Input: Poly1: 3x^2 + 5x^1 + 6, Poly2: 6x^1 + 8 Output: 18x^3 + 54x^2 + 76x^1 + 48 On multiplying each element of 1st polynomial with elements of 2nd polynomial, we get 18x^3 + 24x^2 + 30x^2 + 40x^1 + 36x^1 + 48 On adding values with same power of x, 18x^3 + 54x^2 + 76x^1 + 48 Input: Poly1: 3x^3 + 6x^1 - 9, Poly2: 9x^3 - 8x^2 + 7x^1 + 2 Output: 27x^6 - 24x^5 + 75x^4 - 123x^3 + 114x^2 - 51x^1 - 18Recommended: Please try your approach on {IDE} first, before moving on to the solution.
Approach:
- In this approach we will multiply the 2nd polynomial with each term of 1st polynomial.
- Store the multiplied value in a new linked list.
- Then we will add the coefficients of elements having the same power in resultant polynomial.
Below is the implementation of the above approach:
C++
// C++ implementation of the above approach
#include
using namespace std;
// Node structure containing powerer
// and coefficient of variable
struct Node {
int coeff, power;
Node* next;
};
// Function add a new node at the end of list
Node* addnode[Node* start, int coeff, int power]
{
// Create a new node
Node* newnode = new Node;
newnode->coeff = coeff;
newnode->power = power;
newnode->next = NULL;
// If linked list is empty
if [start == NULL]
return newnode;
// If linked list has nodes
Node* ptr = start;
while [ptr->next != NULL]
ptr = ptr->next;
ptr->next = newnode;
return start;
}
// Function To Display The Linked list
void printList[struct Node* ptr]
{
while [ptr->next != NULL] {
cout coeff next!=NULL && ptr->next->coeff >=0]
cout next;
}
cout coeff next != NULL] {
ptr2 = ptr1;
// Compare the picked element
// with rest of the elements
while [ptr2->next != NULL] {
// If powerer of two elements are same
if [ptr1->power == ptr2->next->power] {
// Add their coefficients and put it in 1st element
ptr1->coeff = ptr1->coeff + ptr2->next->coeff;
dup = ptr2->next;
ptr2->next = ptr2->next->next;
// remove the 2nd element
delete [dup];
}
else
ptr2 = ptr2->next;
}
ptr1 = ptr1->next;
}
}
// Function two Multiply two polynomial Numbers
Node* multiply[Node* poly1, Node* poly2,
Node* poly3]
{
// Create two pointer and store the
// address of 1st and 2nd polynomials
Node *ptr1, *ptr2;
ptr1 = poly1;
ptr2 = poly2;
while [ptr1 != NULL] {
while [ptr2 != NULL] {
int coeff, power;
// Multiply the coefficient of both
// polynomials and store it in coeff
coeff = ptr1->coeff * ptr2->coeff;
// Add the powerer of both polynomials
// and store it in power
power = ptr1->power + ptr2->power;
// Invoke addnode function to create
// a newnode by passing three parameters
poly3 = addnode[poly3, coeff, power];
// move the pointer of 2nd polynomial
// two get its next term
ptr2 = ptr2->next;
}
// Move the 2nd pointer to the
// starting point of 2nd polynomial
ptr2 = poly2;
// move the pointer of 1st polynomial
ptr1 = ptr1->next;
}
// this function will be invoke to add
// the coefficient of the elements
// having same powerer from the resultant linked list
removeDuplicates[poly3];
return poly3;
}
// Driver Code
int main[]
{
Node *poly1 = NULL, *poly2 = NULL, *poly3 = NULL;
// Creation of 1st Polynomial: 3x^2 + 5x^1 + 6
poly1 = addnode[poly1, 3, 3];
poly1 = addnode[poly1, 6, 1];
poly1 = addnode[poly1, -9, 0];
// Creation of 2nd polynomial: 6x^1 + 8
poly2 = addnode[poly2, 9, 3];
poly2 = addnode[poly2, -8, 2];
poly2 = addnode[poly2, 7, 1];
poly2 = addnode[poly2, 2, 0];
// Displaying 1st polynomial
cout
Chủ Đề |