多项式相加
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int data1;
int data2;
struct node *pNext;
} NODE,*PNODE;
PNODE create();
PNODE add(PNODE p1,PNODE p2);
void tra(PNODE pp);
int main()
{ PNODE p1=NULL;
p1=create();
PNODE p2=NULL;
p2=create();
printf("111\n");
PNODE pp=NULL;
printf("111\n");
pp=add(p1,p2);//这一行为什么不执行啊
printf("221\n");
tra(pp);
printf("222\n");
return 0;
}
PNODE create(){
int i;
int n=0;
int val=0;
int val2=0;
PNODE pHead = (PNODE)malloc(sizeof(NODE));
PNODE pTail=pHead;
pTail->pNext=NULL;
//printf("输入此时链表长度\n");
scanf("%d",&n);
for(i=0;i<n;i++)//输入数据
{
scanf("%d %d",&val,&val2);
PNODE pNew = (PNODE)malloc(sizeof(NODE));
pNew->data1=val;
pNew->data2=val2;
pTail->pNext=pNew;
pNew->pNext=NULL;
pTail=pNew;}
return pHead;
}
//加法PNODE add(PNODE p1,PNODE p2){
PNODE pHead = (PNODE)malloc(sizeof(NODE));
PNODE pTail=pHead;
pTail->pNext=NULL;
PNODE t1=NULL;
PNODE t2=NULL;
PNODE t3=NULL;
t1=p1->pNext;
t2=p2->pNext;
while(t1&&t2){
if(t1->data2==t2->data2){
int sum=t1->data1+t2->data1;
if(sum!=0){
t3->data2=t1->data2;
t3->data1=sum;
pTail->pNext=t3;
t3->pNext=NULL;
pTail=t3;}
t1=t1->pNext;
t2=t2->pNext;
}
else if(t1->data2>t2->data2){
t3->data1=t1->data1;
t3->data2=t1->data2;
pTail->pNext=t3;
t3->pNext=NULL;
pTail=t3;
t1=t1->pNext;
}
else if(t1->data2<t2->data2){
t3->data1=t2->data1;
t3->data2=t2->data2;
pTail->pNext=t3;
t3->pNext=NULL;
pTail=t3;
t2=t2->pNext;
}
}
if(t2!=NULL){
while(t2){
t3->data1=t2->data1;
t3->data2=t2->data2;
pTail->pNext=t3;
t3->pNext=NULL;
pTail=t3;
t2=t2->pNext;
}
}
if(t1!=NULL){
while(t1){
t3->data1=t1->data1;
t3->data2=t1->data2;
pTail->pNext=t3;
t3->pNext=NULL;
pTail=t3;
t1=t1->pNext;
}
}
return pHead;
}
//遍历
void tra(PNODE pp){
PNODE p=pp->pNext;
while(p!=NULL){
printf("%d %d",p->data1,p->data2);
p=p->pNext;
}
return ;
}
t3指针没有初始化
【相关推荐】