Application of linked list

typedef struct Node
{
 int coefficient;
 int exponenet;
 struct Node *next;
}node;
void create1(node *poly1,int exp,int coeff)
{   while(poly1->next!=NULL)
   {
     poly1=poly1->next;
   }
    poly1->exponenet=exp;
    poly1->coefficient=coeff;
    poly1->next=(node *)malloc(sizeof(node));
    poly1=poly1->next;
    poly1->next=NULL;
}
void create2(node *poly2,int exp,int coeff)
{   while(poly2->next!=NULL)
   {
     poly2=poly2->next;
   }
    poly2->exponenet=exp;
    poly2->coefficient=coeff;
    poly2->next=(node *)malloc(sizeof(node));
    poly2=poly2->next;
    poly2->next=NULL;
}
void print(node *pointer)
{
if(pointer->next==NULL)
{
return;
}
if(pointer->exponenet==0)
 printf("%dx^%d ",pointer->coefficient,pointer->exponenet);
else
 printf("%dx^%d+",pointer->coefficient,pointer->exponenet);
print(pointer->next);
}
void additon(node *p1,node *p2,node *p3)
{   int c1,c2,e1,e2;
   if(p1==NULL&&p2==NULL)
   {
    p3=NULL;
    return;
   }
   if(p1==NULL&&p2!=NULL)
   {
    p3=p2;
    return;
   }
   if(p1!=NULL&&p2==NULL)
   {
    p3=p1;
    return;
   }
   node *temp1,*temp2,*temp3;
   temp1=p1;
   temp2=p2;
   temp3=p3;
   while(temp1->next!=NULL&&temp2->next!=NULL)
   {
       c1=temp1->coefficient;
       c2=temp2->coefficient;
       e1=temp1->exponenet;
       e2=temp2->exponenet;
       if(e1>e2)
       {
           temp3->coefficient=temp1->coefficient;
           temp3->exponenet=temp1->exponenet;
           temp3->next=(node *)malloc(sizeof(node));
           temp3=temp3->next;
           temp3->next=NULL;
           temp1=temp1->next;

       }
       else if(e2>e1)
       {
           temp3->coefficient=temp2->coefficient;
           temp3->exponenet=temp1->exponenet;
           temp3->next=(node *)malloc(sizeof(node));
           temp3=temp3->next;
           temp3->next=NULL;
           temp2=temp2->next;

       }
       else if(c1+c2==0)
       {
          temp1=temp1->next;
          temp2=temp2->next;
       }
       else if(c1+c2!=0)
       {
           temp3->coefficient=temp2->coefficient+temp1->coefficient;
           temp3->exponenet=temp1->exponenet;
           temp3->next=(node *)malloc(sizeof(node));
           temp3=temp3->next;
           temp3->next=NULL;
           temp2=temp2->next;
           temp1=temp1->next;

       }
   }
   if(temp1->next==NULL)
   { while(temp2->next!=NULL)
    {
       temp3->coefficient=temp2->coefficient;
       temp3->exponenet=temp2->exponenet;
       temp3->next=(node *)malloc(sizeof(node));
       temp3->next=NULL;
       temp2=temp2->next;
    }
   }
   else if(temp2->next==NULL)
   { while(temp1->next!=NULL)
    {
       temp3->coefficient=temp1->coefficient;
       temp3->exponenet=temp1->exponenet;
       temp3->next=(node *)malloc(sizeof(node));
       temp3->next=NULL;
       temp1=temp2->next;
    }
   }

   printf("\nThe resulting polynomial is\n");
   print(p3);

}
int main()
{
  int m,n,exp,coeff,i;
 node *p1,*p2,*s1,*s2,*s3;
 s1=(node *)malloc(sizeof(node));
 s1->next=NULL;
 p1=s1;
 s2=(node *)malloc(sizeof(node));
 s2->next=NULL;
 p2=s2;
 printf("\nEnter the no of terms for p1 and p2\n");
 scanf("%d%d",&m,&n);
 printf("\nEnter coefficients and exponetial for p1\n");
for(i=0;i<m;i++)
{
    scanf("%d%d",&coeff,&exp);
    create1(p1,exp,coeff);

}
printf("\nEnter coefficients and exponential for p2\n");
for(i=0;i<n;i++)
{
    scanf("%d%d",&coeff,&exp);
    create2(p2,exp,coeff);

}
printf("\npolynomial p1 is :");
print(s1);
printf("\npolynomial p2 is :");
print(s2);
s3=(node *)malloc(sizeof(node));
s3->next=NULL;
additon(s1,s2,s3);
 return 0;
}

Comments