代码如下
#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的循环语句。麻烦看看哪里出错了