State true false and justify we cannot perform multiplication of two polynomials using linked list

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 - 18
Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach:

  1. In this approach we will multiply the 2nd polynomial with each term of 1st polynomial.
  2. Store the multiplied value in a new linked list.
  3. 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

Bài mới nhất

Chủ Đề