Ll
#include <stdio.h>
#include <stdlib.h>
// Node structure to represent a term in a polynomial
typedef struct Node {
int coefficient;
int exponent;
struct Node* next;
} Node;
// Function to create a new node
Node* createNode(int coeff, int exp) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (newNode == NULL) {
printf("Memory allocation failed.\n");
exit(1);
}
newNode->coefficient = coeff;
newNode->exponent = exp;
newNode->next = NULL;
return newNode;
}
// Function to insert a term into the polynomial
void insertTerm(Node** poly, int coeff, int exp) {
Node* newNode = createNode(coeff, exp);
if (*poly == NULL) {
poly = newNode;
} else {
Node temp = *poly;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newNode;
}
}
// Function to add two polynomials
Node* addPolynomials(Node* poly1, Node* poly2) {
Node* result = NULL;
Node* current1 = poly1;
Node* current2 = poly2;
while (current1 != NULL && current2 != NULL) {
if (current1->exponent > current2->exponent) {
insertTerm(&result, current1->coefficient, current1->exponent);
current1 = current1->next;
} else if (current1->exponent < current2->exponent) {
insertTerm(&result, current2->coefficient, current2->exponent);
current2 = current2->next;
} else {
int sum = current1->coefficient + current2->coefficient;
insertTerm(&result, sum, current1->exponent);
current1 = current1->next;
current2 = current2->next;
}
}
// If any polynomial has remaining terms, append them to the result
while (current1 != NULL) {
insertTerm(&result, current1->coefficient, current1->exponent);
current1 = current1->next;
}
while (current2 != NULL) {
insertTerm(&result, current2->coefficient, current2->exponent);
current2 = current2->next;
}
return result;
}
// Function to display a polynomial
void displayPolynomial(Node* poly) {
if (poly == NULL) {
printf("Polynomial is empty.\n");
return;
}
Node* temp = poly;
while (temp != NULL) {
printf("%dx^%d ", temp->coefficient, temp->exponent);
temp = temp->next;
if (temp != NULL) {
printf("+ ");
}
}
printf("\n");
}
// Function to free memory allocated for a polynomial
void freePolynomial(Node* poly) {
Node* temp;
while (poly != NULL) {
temp = poly;
poly = poly->next;
free(temp);
}
}
int main() {
Node* poly1 = NULL;
Node* poly2 = NULL;
Node* result = NULL;
// Insert terms into first polynomial: 3x^2 + 2x^1 + 5x^0
insertTerm(&poly1, 3, 2);
insertTerm(&poly1, 2, 1);
insertTerm(&poly1, 5, 0);
// Insert terms into second polynomial: 4x^3 + 2x^1 + 7x^0
insertTerm(&poly2, 4, 3);
insertTerm(&poly2, 2, 1);
insertTerm(&poly2, 7, 0);
printf("First polynomial: ");
displayPolynomial(poly1);
printf("Second polynomial: ");
displayPolynomial(poly2);
// Add the polynomials
result = addPolynomials(poly1, poly2);
printf("Resultant polynomial: ");
displayPolynomial(result);
// Free memory
freePolynomial(poly1);
freePolynomial(poly2);
freePolynomial(result);
return 0;
}