Welcome to nkcoderz.com In this article we will discuss how to create a c program to add two polynomials using linked list.
Code for c program to add two polynomials using linked list
#include <stdio.h>
#include <stdlib.h>
struct Node {
int coefficient;
int exponent;
struct Node *next;
};
struct Node *createNode(int coefficient, int exponent) {
struct Node *newNode = (struct Node *)malloc(sizeof(struct Node));
newNode->coefficient = coefficient;
newNode->exponent = exponent;
newNode->next = NULL;
return newNode;
}
struct Node *insertAtEnd(struct Node *head, int coefficient, int exponent) {
struct Node *newNode = createNode(coefficient, exponent);
if (head == NULL) {
return newNode;
}
struct Node *current = head;
while (current->next != NULL) {
current = current->next;
}
current->next = newNode;
return head;
}
struct Node *addPolynomials(struct Node *p1, struct Node *p2) {
struct Node *result = NULL;
while (p1 != NULL && p2 != NULL) {
if (p1->exponent > p2->exponent) {
result = insertAtEnd(result, p1->coefficient, p1->exponent);
p1 = p1->next;
} else if (p2->exponent > p1->exponent) {
result = insertAtEnd(result, p2->coefficient, p2->exponent);
p2 = p2->next;
} else {
result = insertAtEnd(result, p1->coefficient + p2->coefficient, p1->exponent);
p1 = p1->next;
p2 = p2->next;
}
}
while (p1 != NULL) {
result = insertAtEnd(result, p1->coefficient, p1->exponent);
p1 = p1->next;
}
while (p2 != NULL) {
result = insertAtEnd(result, p2->coefficient, p2->exponent);
p2 = p2->next;
}
return result;
}
void displayPolynomial(struct Node *head) {
while (head != NULL) {
printf("%dx^%d", head->coefficient, head->exponent);
head = head->next;
if (head != NULL) {
printf(" + ");
}
}
printf("\n");
}
int main() {
struct Node *p1 = NULL, *p2 = NULL, *result = NULL;
p1 = insertAtEnd(p1, 2, 0);
p1 = insertAtEnd(p1, 3, 1);
p1 = insertAtEnd(p1, 4, 2);
p2 = insertAtEnd(p2, 5, 0);
p2 = insertAtEnd(p2, 6, 1);
p2 = insertAtEnd(p2, 7, 2);
printf("Polynomial 1: ");
displayPolynomial(p1);
printf("Polynomial 2: ");
displayPolynomial(p2);
result = addPolynomials(p1, p2);
printf("Result: ");
displayPolynomial(result);
return 0;
}
Output
Polynomial 1: 2x^0 + 3x^1 + 4x^2
Polynomial 2: 5x^0 + 6x^1 + 7x^2
Result: 7x^0 + 9x^1 + 11x^2
Explanation
In this implementation, the struct Node
represents a single term in a polynomial, with a coefficient
and an exponent
as its properties. The createNode
function creates a new node with the given coefficient and exponent, and the insertAtEnd
function inserts a new node at the end of the linked list.
The addPolynomials
function takes two polynomials as input and returns a new polynomial that is the sum of the input polynomials. The displayPolynomial
function displays the polynomial in the form of ax^b + cx^d + ...
The main
function creates two polynomials p1
and p2
by inserting nodes at the end of the linked list using the insertAtEnd
function. The polynomials are then displayed using the displayPolynomial
function.
Finally, the addPolynomials
function is called to add the two polynomials, and the result is displayed using the displayPolynomial
function.
The addPolynomials
function uses two pointers p1
and p2
to traverse the two input polynomials. The function initializes a result polynomial to an empty linked list (represented by NULL
).
The function then uses a while
loop to traverse both polynomials, comparing the exponents of each term.
If the exponent of the term pointed to by p1
is greater than that of p2
, the term is added to the result polynomial and p1
is advanced to the next term.
Similarly, if the exponent of the term pointed to by p2
is greater than that of p1
, the term is added to the result polynomial and p2
is advanced to the next term. If the exponents are equal, the sum of the coefficients is added to the result polynomial, and both p1
and p2
are advanced to the next terms.
Once one of the input polynomials has been fully processed, the remaining terms of the other polynomial are added to the result polynomial.
The displayPolynomial
function takes a polynomial as input and displays it in the form of ax^b + cx^d + ...
by traversing the linked list and printing the coefficient and exponent of each term, separated by x^
.
Conclusion
If you liked this post, then please share this with your friends and make sure to bookmark this website for more awesome content.