写的代码有问题,主要就是链式存储实现线性表的内容(C语言)

代码如下


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

struct PolyNode{
    int coef;    //系数 
    int expon;    //指数 
    struct PolyNode *link;    //下一节点指针
};
typedef struct PolyNode *Polynomial;

/*PolyAdd的子程序*/
void Attach(int c,int e,Polynomial *pRear)
{
    Polynomial P;
    P=(Polynomial)malloc(sizeof(struct PolyNode));
    P->coef = c;
    P->expon = e;
    P->link = NULL;
    (*pRear)->link = P;
    *pRear = P;
}
/*PolyAdd的子程序*/
int Compare(int x1,int x2)
{
    if(x1>x2) return 1;
    else if(x1<x2) return -1;
    else return 0;
}
Polynomial PolyAdd( Polynomial P1,Polynomial P2 )
{
    Polynomial front,rear,temp;
    int sum;
    rear = (Polynomial)malloc(sizeof(struct PolyNode));
    front = rear;
    while(P1&&P2){
        switch(Compare(P1->expon,P2->expon)){
            case 1:
                Attach(P1->coef,P1->expon,&rear);
                P1=P1->link;
                break;
            case -1:
                Attach(P2->coef,P2->expon,&rear);
                P2=P2->link;
                break;
            case 0:
                sum=P1->coef+P2->coef;
                if(sum)Attach(sum,P1->expon,&rear);
                P1=P1->link;
                P2=P2->link;
                break;
        }
    }
    for(;P1;P1=P1->link) Attach(P1->coef,P1->expon,&rear);
    for(;P2;P2=P2->link) Attach(P2->coef,P2->expon,&rear);
    rear->link=NULL;
    temp=front;
    front=front->link;
    free(temp);
    return front;
}

Polynomial CreateNode()
{
    Polynomial P;
    int c,e;
    scanf("%d%d",&c,&e);
    P = (Polynomial)malloc(sizeof(struct PolyNode));
    P->coef=c;
    P->expon=e;
    P->link=NULL;
    return P;
}

Polynomial Create()
{
    int N,i,c,e;
    scanf("%d",&N);
    Polynomial Pfront,rear,temp;
    rear = (Polynomial)malloc(sizeof(struct PolyNode));
    rear->link=NULL;
    Pfront = rear;
    for(i=1;i<=N;i++){
        printf("i=%d\n,N=%d\n",i,N);
        rear->link=CreateNode();
        rear=rear->link;
    }
    temp = Pfront;
    Pfront=Pfront->link;
    free(Pfront);
    if(rear->link==NULL) printf("Success Create!\n");
    rear = Pfront;
    while(rear){
        printf("%d %d ",rear->coef,rear->expon);
        rear=rear->link;
    }
    return Pfront;
}

void printPoly(Polynomial P)
{
    while(P!=NULL){
        if(P->link!=NULL) printf("%d %d ",P->coef,P->expon);
        else if(P->link==NULL) printf("%d %d",P->coef,P->expon);
        P=P->link;
    }
}

int main()
{
    printf("00000\n");
    Polynomial P1=Create();
    printf("11111\n");
    Polynomial P2=Create();
    printPoly(P2);
    printf("22222\n");
    Polynomial P3=PolyAdd(P1,P2);
    printf("33333\n");
    Polynomial rear=P3;
    int cnt=3;
    while(rear){
        
        printf("%d %d ",rear->coef,rear->expon);
        rear=rear->link;
        return;
    }
    return 0;
}

我的问题就在Create()里面,因为发现创造后的链表没法输出了。我的输出方法在Create()里面也有用,就是那句while的循环语句。麻烦看看哪里出错了

90行free(Pfront);为什麽呢?????在create函数里释放?
temp = Pfront;
Pfront=Pfront->link;
free(Pfront);
这不直接让temp指向了一个野指针了?

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632