链表问题 哪位帮忙找错 谢谢哈
实验目的:学习用指针构造链表,操作链表
实验内容:
输入两个非降序列,转换成两个非升序列,合并成一个非升序列。
基本要求:
用链表实现。
#include<stdio.h>
#include<malloc.h>
#define NULL 0
#define LEN sizeof(struct m)
struct m
{
long a;
struct m *next;
};
int n;
struct m *creat(void)
{
struct m *head;
struct m *p1,*p2;
n=0;
p1=p2=(struct m *)malloc(LEN);
printf("输入非降序列,以0结束:");
scanf("%d",&p1->a);
head=NULL;
while(p1->a!=0)
{
n++;
if(n==1)head=p1;
else p2->next=p1;
p2=p1;
p1=(struct m *)malloc(LEN);
scanf("%d",&p1->a );
}
p2->next=NULL;
free(p1);
return(head);
}
void print(struct m *head)
{
struct m *p;
p=head;
if(head!=NULL)
do
{
printf("%d",p->a );
p=p->next;
}while(p!=NULL);
printf("\n");
}
void exchange(struct m *head)
{
struct m *p1,*p2,*p3;
p1=p2=p3=(struct m *)malloc(LEN);
p1=head;
p2=p1->next;
p3=p2->next;
while(p3!=NULL)
{
p2->next=p1;
p1=p2;
p2=p3;
p3=p3->next;
}
p2->next=p1;
head=p2;
free(p1),free(p2);
}
struct m *combine(struct m *head1,struct m *head2)
{
struct m *p1,*p2,*p3,*head;
p1=p2=p3=head=(struct m *)malloc(LEN);
p1=head1,p2=head2;
n=0;
for(;p1!=NULL&&p2!=NULL;)
{
n++;
if(n==1)
{
if(p1->a>p2->a)
{
head=p1;p1=p1->next;
}
else{
head=p2;p2=p2->next;
}
}
else if(p1->a>p2->a)
{
p3=p1;
p1=p1->next;
p3->next=p2;
}
else
{
p3=p2;
p2=p2->next;
p3->next=p1;
}
}
free(p1),free(p2),free(p3);
return head;
}
void main()
{
struct m *head1,*head2,*p;
head1=creat();
head2=creat();
exchange(head1),exchange(head2);
printf("非升序列为: \n");
print(head1),print(head2);
head1=combine(head1,head2);
printf("合并后为:");
print(head1);
}
不知道为什么错 奇怪死了