linkedlist
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int coefficient;
int exponent;
struct Node* next;
} 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;
}
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;
}
}
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;
}
}
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;
}
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");
}
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;
insertTerm(&poly1, 3, 2);
insertTerm(&poly1, 2, 1);
insertTerm(&poly1, 5, 0);
insertTerm(&poly2, 4, 3);
insertTerm(&poly2, 2, 1);
insertTerm(&poly2, 7, 0);
printf("First polynomial: ");
displayPolynomial(poly1);
printf("Second polynomial: ");
displayPolynomial(poly2);
result = addPolynomials(poly1, poly2);
printf("Resultant polynomial: ");
displayPolynomial(result);
freePolynomial(poly1);
freePolynomial(poly2);
freePolynomial(result);
return 0;
}