单链表操作 无错误但运行遇到停止工作,求助!!
#include<stdio.h>#include<malloc.h>
#include<conio.h>
typedef struct
{
int xs;//系数;
int zs;//指数;
}
ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}
LNode,*LinkList;
LinkList initList() //创建链表
{
LinkList L;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
return(L);
}
void InsLNode(LinkList L,ElemType x)//插入链表
{
LinkList p1,p2;
p1=(LinkList)malloc(sizeof(LNode));
p1->data=x;
p2=L;
while(p2->next)
p2=p1->next;
p1->next=NULL;
p2->next=p1;
}
void AddPolyn(LinkList pa,LinkList pb)
{
LinkList a1,b1,a2,b2;
int sum;
int a,b;
a1=pa;
b1=pb;
a2=a1->next;
b2=b1->next;
while(a2&&b2)
{
a=a2->data.zs;
b=b2->data.zs;
if(a<b)
{
a1=a2;
a2=a2->next;
}
if(a==b)
{
sum=a2->data.xs+b2->data.xs;
if(sum!=0)
{
a2->data.xs=sum;
}
else
{
a1->next=a2->next;
free(a2);
a2=a1->next;
b1->next=b2->next;
free(b2);
b2=b1->next;
}
}
if(a>b)
{
b1->next=b2->next;
b2->next=a1->next;
a1->next=b2;
a1=b2;
free(b2);
b2=b1->next;
}
}
if(b2)
a1->next=b2;
free(b1);
}
void Invert(LinkList L)//逆序输入链表
{
LinkList p,q,r;
p=L->next;
q=p->next;
while(q!=NULL)
{
r=q->next;
q->next=p;
p=q;
p=r;
}
L->next->next=NULL;
L->next=p;
}
void print(LinkList L)//输出多项式
{
LinkList p;
p=L->next;
while(p->next)
{
printf("%ix^%d+",p->data.xs,p->data.zs);
p=p->next;
}
printf("%ix^%d",p->data.xs,p->data.zs);
}
void main()
{
LinkList La,Lb;
ElemType c;
int a,i;
La=initList();
Lb=initList();
printf("\n");
printf("输入La的项数:");
scanf("%d",&a);
for(i=0;i<a;i++)
{
printf("输入La的第%d项系数:",i+1);
scanf("%i",&c.xs);
printf("输入La的第%d项指数:",i+1);
scanf("%d",&c.zs);
InsLNode(La,c);
}
printf("输入Lb的项数:");
scanf("%d",&a);
for(i=0;i<a;i++)
{
printf("输入Lb的第%d项系数:",i+1);
scanf("%i",&c.xs);
printf("输入Lb的第%d项指数:",i+1);
scanf("%d",&c.zs);
InsLNode(Lb,c);
}
printf("多项式和为:");
printf("\n");
AddPolyn(La,Lb);
Invert(La);
print(La);
}
运行成功但是输入到第四行数字之后回车就弹出停止工作,怎么处理???还是代码里有错误?
[ 本帖最后由 zhuhong1990 于 2012-11-28 17:34 编辑 ]