企业私有云方案:请帮我看一下我做的C语言编程题有什么问题

来源:百度文库 编辑:神马品牌网 时间:2024/04/26 12:34:41
问题描述
编写一个程序,来实现两条链表的合并。具体来说,首先根据用户输入的两组数据来创建两条链表,每组数据都是按照从小到大的顺序排列的。然后把这两条链表合并为一条,并且仍然保持从小到大的顺序。要求采用动态链表的方法来实现。

输入格式
第一行是一个整数M,表示第一条链表的元素个数;
接下来有M行,每一行是一个整数,这些整数满足从小到大的顺序;
再接下来是一个整数N,表示第二条链表的元素个数;
接下来有N行,每一行是一个整数。
输出格式
输出只有一行,把合并以后的链表当中的每一个数据依次打印出来。

样例输入
2
20
50
3
10
30
40
样例输出
10 20 30 40 50

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <malloc.h>
void main()
{
struct zheng
{
int z;
struct zheng *next;
};
int M,N,i;
printf("please enter M:");
scanf("%d",&M);
struct zheng *p1,*q1,*head1;
head1=p1=q1=NULL;
for(i=1;i<=M;i++)
{
p1=(struct zheng *)malloc(sizeof(struct zheng));
scanf("%d",&p1->z);
if(head1==NULL)
head1=p1;
else
q1->next=p1;
q1=p1;
if(i==M)
q1->next=NULL;
}
printf("please enter N:");
scanf("%d",&N);
struct zheng *p2,*q2,*head2;
head2=p2=q2=NULL;
for(i=1;i<=N;i++)
{
p2=(struct zheng *)malloc(sizeof(struct zheng));
scanf("%d",&p2->z);
if(head2==NULL)
head2=p2;
else
q2->next=p2;
q2=p2;
if(i==N)
q2->next=NULL;
}
struct zheng *head,*p,*q,*pnode;
head=p=q=pnode=NULL;
head=head1;
for(i=1;i<=N;i++)
{
q=head;
p=head->next;
pnode=head2;
head2=pnode->next;
pnode->next=NULL;
if(head==NULL)
head=pnode;
if(pnode->z<head->z)
{
pnode->next=head;
head=pnode;
}
while(p!=NULL)
{
if(pnode->z<p->z)
break;
else
{
p=p->next;
q=q->next;
}
}
pnode->next=p;
q->next=pnode;
}
p=head;
for(i=1;i<=M+N;i++)
{
printf("%d\n",p->z);
p=p->next;
}
for(i=1;i<=M+N;i++)
{
p=head;
head=p->next;
free(p);
}
}

是数据结构的算法呀!