OneCompiler

linkedlist

154

#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;

}