Given two polynomial numbers represented by a linked list. Write a function to perform their algebraic sum.

Examples:

Input:
1st number = 5x^2 + 4x^1 + 2x^0
2nd number = 5x^1 + 5x^0
Output: 5x^2 + 9x^1 + 7x^0

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach: The implementation uses map data structure so that all coefficients of same power value are added together and kept in key-value pairs inside a map.

Below is the implementation of the above approach:

 `// C++ program for addition of two polynomials ` `// represented as linked lists ` `#include ` `using` `namespace` `std; ` ` `  `// Structure of Node used ` `struct` `Node { ` ` `  `    ``// Coefficient of the polynomial ` `    ``int` `coeff; ` ` `  `    ``// Power of the polynomial ` `    ``int` `pow``; ` `    ``Node* next; ` `}; ` ` `  `// Function to create new node ` `void` `create_node(``int` `x, ``int` `y, ` `                 ``struct` `Node** temp) ` `{ ` `    ``struct` `Node *r, *z; ` `    ``z = *temp; ` `    ``if` `(z == NULL) { ` `        ``r = (``struct` `Node*) ` `            ``malloc``(``sizeof``(``struct` `Node)); ` `        ``r->coeff = x; ` `        ``r->``pow` `= y; ` `        ``*temp = r; ` `        ``r->next = (``struct` `Node*) ` `            ``malloc``(``sizeof``(``struct` `Node)); ` `        ``r = r->next; ` `        ``r->next = NULL; ` `    ``} ` `    ``else` `{ ` `        ``r->coeff = x; ` `        ``r->``pow` `= y; ` `        ``r->next = (``struct` `Node*) ` `            ``malloc``(``sizeof``(``struct` `Node)); ` `        ``r = r->next; ` `        ``r->next = NULL; ` `    ``} ` `} ` ` `  `// Display Linked list ` `void` `show(``struct` `Node* node) ` `{ ` `    ``if` `(node == NULL) ` `        ``return``; ` `    ``while` `(node->next != NULL) { ` `        ``printf``(``"%dx^%d"``, node->coeff, node->``pow``); ` `        ``node = node->next; ` `        ``if` `(node->next != NULL) ` `            ``printf``(``" + "``); ` `    ``} ` `} ` ` `  `/* Function to print the required sum of a  ` `polynomial p1 and p2 as specified in output */` `void` `addPolynomial(Node* p1, Node* p2) ` `{ ` `    ``map<``int``, ``int``> mp; ` `    ``Node* temp1 = p1; ` `    ``Node* temp2 = p2; ` `    ``while` `(temp1 != NULL) { ` ` `  `        ``// Add coefficients of same power value ` `        ``// map contains (powervalue, coeff) pair ` `        ``mp[temp1->``pow``] += temp1->coeff; ` `        ``temp1 = temp1->next; ` `    ``} ` `    ``while` `(temp2 != NULL) { ` `        ``mp[temp2->``pow``] += temp2->coeff; ` `        ``temp2 = temp2->next; ` `    ``} ` ` `  `    ``// Started from the end because higher power should ` `    ``// come first and there should be "+" symbol in between ` `    ``// so iterate up to second element and print last out of ` `    ``// the loop. ` ` `  `    ``for` `(``auto` `it = (mp.rbegin()); it != prev(mp.rend()); ++it) ` `        ``cout << it->second << ``"x^"` `<< it->first << ``" + "``; ` `    ``cout << mp.begin()->second << ``"x^"` `<< mp.begin()->first; ` `} ` ` `  `// Driver function ` `int` `main() ` `{ ` `    ``struct` `Node *poly1 = NULL, *poly2 = NULL, *poly = NULL; ` ` `  `    ``// Create first list of 5x^2 + 4x^1 + 2x^0 ` `    ``create_node(5, 2, &poly1); ` `    ``create_node(4, 1, &poly1); ` `    ``create_node(2, 0, &poly1); ` ` `  `    ``// Create second list of 5x^1 + 5x^0 ` `    ``create_node(5, 1, &poly2); ` `    ``create_node(5, 0, &poly2); ` ` `  `    ``printf``(``"1st Number: "``); ` `    ``show(poly1); ` ` `  `    ``printf``(``"\n2nd Number: "``); ` `    ``show(poly2); ` ` `  `    ``poly = (``struct` `Node*)``malloc``(``sizeof``(``struct` `Node)); ` ` `  `    ``printf``(``"\nAdded polynomial: "``); ` ` `  `    ``// Function add two polynomial numbers ` `    ``addPolynomial(poly1, poly2); ` ` `  `    ``return` `0; ` `} `

Output:

```1st Number: 5x^2 + 4x^1 + 2x^0
2nd Number: 5x^1 + 5x^0
Added polynomial: 5x^2 + 9x^1 + 7x^0
```

Time Complexity: O((m + n)log(m+n)) where m and n are numbers of nodes in first and second lists respectively and we are using a map for adding the coefficients extra log(m+n) factor is added.

My Personal Notes arrow_drop_up Competitive Programmer, Full Stack Developer, Technical Content Writer, Machine Learner

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

Article Tags :
Practice Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.