Создание полинома с использованием связанного списка

Я написал код для создания полинома с использованием связанного списка, но в некоторых случаях он показывает ошибку сегментации, хотя код кажется правильным. Вот код:

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

Может кто-нибудь помочь разобраться в этом?

0 ответов

Другие вопросы по тегам