3.1 Polynomial Addition Using Linked List

PHOTO EMBED

Fri Aug 25 2023 06:24:16 GMT+0000 (Coordinated Universal Time)

Saved by @109_Vivek

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

struct Node
{
    int coff;
    int pow;
    struct Node *next;
};
struct Node *head1 = NULL;
struct Node *head2 = NULL;

struct Node *createNode(int i)
{
    struct Node *newNode = (struct Node *)malloc(sizeof(struct Node));
    printf("Enter Coefficient of x^%d : ", i);
    scanf("%d", &newNode->coff);

    newNode->pow = i;

    newNode->next = NULL;
    return newNode;
}
struct Node *create(int i, int coff)
{
    struct Node *newNode = (struct Node *)malloc(sizeof(struct Node));
    newNode->coff=coff;
    newNode->pow = i;

    newNode->next = NULL;
    return newNode;
}
void displayPolynomial(struct Node *head)
{
    struct Node *temp = head;
    while (temp != NULL)
    {
        printf("%dx^%d ", temp->coff, temp->pow);
        temp = temp->next;
    }
    printf("\n");
}
struct Node *createPolynomial(struct Node *head, int n)
{
    int i;
    for (i = 0; i <= n; i++)
    {
        if (head == NULL)
        {
            head = createNode(i);
        }
        else
        {
            struct Node *temp = head;
            while (temp->next != NULL)
            {
                temp = temp->next;
            }
            temp->next = createNode(i);
        }
    }
    return head;
}

void addPolynomials(struct Node *temp1, struct Node *temp2)
{
    struct Node *finalHead = NULL;
    int i = 0;
    while (temp1 != NULL && temp2 != NULL)
    {
        if (finalHead == NULL)
        {
            finalHead = create(i,temp1->coff+temp2->coff);
        }
        else
        {
            struct Node *temp = finalHead;
            while (temp->next != NULL)
            {
                temp = temp->next;
            }
            temp->next = create(i,temp1->coff+temp2->coff);
        }
        i++;
        temp1=temp1->next;
        temp2=temp2->next;
    }
    if(temp1!=NULL){
        struct Node* temp=finalHead;
        while(temp->next!=NULL)
        {
            temp=temp->next;
        }
        temp->next=temp1;
    }
    else if(temp2!=NULL){
        struct Node* temp=finalHead;
        while(temp->next!=NULL)
        {
            temp=temp->next;
        }
        temp->next=temp2;
    }
    printf("\nAdded Polynomial : ");
    displayPolynomial(finalHead);
}
void main()
{

    // Create First Polynomial
    int a, b;
    clrscr();
    printf("Enter Highest Exponent in Polynomial P : ");
    scanf("%d", &a);
    head1 = createPolynomial(head1, a);

    // Create Second Polynomial
    printf("Enter Highest Exponent in Polynomial Q : ");
    scanf("%d", &b);
    head2 = createPolynomial(head2, b);
    printf("\nPolynomial P : ");
    displayPolynomial(head1);
    printf("\nPolynomail Q : ");
    displayPolynomial(head2);
    addPolynomials(head1, head2);
    getch();
}
content_copyCOPY