Создание полинома с использованием связанного списка
Я написал код для создания полинома с использованием связанного списка, но в некоторых случаях он показывает ошибку сегментации, хотя код кажется правильным. Вот код:
#include<stdio.h>
#include<stdlib.h>
#include<limits.h>
typedef struct node_tag
{
int exp;
float coeff;
struct node_tag *next;
}node;
typedef enum {FAILURE,SUCCESS} status;
node *ReadPoly();
node *MakeTerm(float c,int e);
void TraverseList(node *head);
node *AddPoly(node *poly1,node *poly2);
node *MulPoly(node *poly1,node *poly2);
void Insert(node **rpptr,node *nptr);
int main()
{
node *lptr1,*lptr2,*sum,*mul;
lptr1=ReadPoly();
printf("1st list is:\n");
TraverseList(lptr1);
lptr2=ReadPoly();
printf("2nd list is:\n");
TraverseList(lptr2);
//sum=AddPoly(lptr1,lptr2);
//printf("addition list is:\n");
//TraverseList(sum);
//mul=MulPoly(lptr1,lptr2);
//printf("multiplication list is:\n");
//TraverseList(mul);
return 0;
}
node *MakeTerm(float c,int e)
{
node *ptr;
ptr=(node *)malloc(sizeof(node));
ptr->coeff=c;
ptr->exp=e;
ptr->next=NULL;
return ptr;
}
node *InsertTerm(float c,int e,node *tail)
{
tail->next=MakeTerm(c,e);
tail=tail->next;
return(tail);
}
node *ReadPoly()
{
node *result,*tail,*ptr;
int exp,lastexp,done=0;
float coeff;
printf("enter the coeff in decreasing exp");
lastexp=INT_MAX;
result=tail=MakeTerm(0.0,0);
while(done==0)
{
scanf("%f",&coeff);
scanf("%d",&exp);
if((exp>lastexp)||(exp<0)||(coeff==0))
{
done=1;
}
else
{
tail=InsertTerm(coeff,exp,tail);
lastexp=exp;
if(exp==0)
{
done=1;
}
}
}
tail->next=NULL;
ptr=result;
result=result->next;
free(ptr);
return result;
}
void TraverseList(node *head)
{
node *ptr;
ptr=head;
printf("\nthe traversed list is\n");
while(ptr!=NULL)
{
printf(" %fx^%d ",ptr->coeff,ptr->exp);
ptr=ptr->next;
}
}
Я ввел несколько примеров, и это показывает этот тип ошибки, узлы не создаются, хотя код поддерживает это.
enter the coeff in decreasing exp30
0
1st list is:
the traversed list is
30.000000x^0 enter the coeff in decreasing exp50
2
10
1
0
2
2nd list is:
the traversed list is
Segmentation fault (core dumped)
Может кто-нибудь помочь разобраться в этом?