#include <stdio.h>
#include <stdlib.h>
typedef struct lnode *list;
struct lnode{
int zhi;
int xi;
list next;
};
list read(){
int i,j,k;
scanf("%d",&i);
list head=(list)malloc(sizeof(struct lnode));
list last=head;
last->next=NULL;
while(i--){
scanf("%d %d",&j,&k);
list p=(list)malloc(sizeof(struct lnode));
p->xi=j;
p->zhi=k;
last->next=p;
p->next=NULL;
last=p;
}
free(head);
return head->next;
}
list add(list p1,list p2){
list t1;list t2;
t1=p1;t2=p2;
int sum;
list head=(list)malloc(sizeof(struct lnode));
list last=head;
last->next=NULL;
list node=(list)malloc(sizeof(struct lnode));
while(t1!=NULL&&t2!=NULL){
if(t1->zhi==t2->zhi){
sum=t1->xi+t2->xi;
}
else if(sum!=0){
node->xi=sum;
node->zhi=t1->zhi;
last->next=node;
last=node;
last->next=NULL;*
}
if(t1->zhi>t2->zhi){
node->xi=t2->xi;
node->zhi=t2->zhi;
last->next=node;
last=node;
last->next=NULL;
}else{
node->xi=t1->xi;
node->zhi=t1->zhi;
last->next=node;
last=node;
last->next=NULL;
}
t1=t1->next;t2=t2->next;
}
while(t1){
last->next=t1;
t1=t1->next;
t1->next=NULL;
last=t1;
}
while(t2){
last->next=t2;
t2=t2->next;
t2->next=NULL;
last=t2;
}
return head->next;
}
int main(){
list p1,p2;
p1=read();
p2=read();
list l=add(p1,p2);
printf("%d %d\n",l->xi,l->zhi);
return 0;
}
read就有问题啊,先free掉head了,怎么还return head->next呢