【程序填空题】链表合并。
【问题描述】
已有a、b两个链表,每个链表结点中的数据包括学号和成绩。要求把两个链表合并,按学号升序排列。
【输入形式】
第一行输入a、b两个链表结点的数量N、M,用空格分隔。接下来N行是a的数据,然后M行是b的数据,每行数据均由学号和成绩两部分组成。
【输出形式】
按照学号升序排列的数据。
【样例输入】
2 3
5 100
6 89
3 82
4 95
2 10
【样例输出】
2 10
3 82
4 95
5 100
6 89
程序填空部分
#include<stdio.h>
#include<stdlib.h>
typedef struct student
{
int num;
int score;
struct student *next;
}stu;
stu *create(stu *L,int n)
{
int i;
stu *p,*q;
L = (1) ;
q = L;
L->next = NULL;
for(i = 0; i < n; i++)
{
p = (stu *)malloc(sizeof(stu));
p->next = NULL;
scanf("%d%d",&p->num, (2) );
q->next = p;
q = p;
}
return L;
}
stu *addandsort(stu *L1,stu *L2)
{
stu *p,*q,*min;
int t;
p = L1;
while(p->next!=NULL)
(3) ;
p->next = L2->next;
p = L1->next;
while(p)
{
min = p;
q = p->next;
while( (4) )
{
if(min->num>q->num)
min = q;
q = q->next;
}
t = p->num;p->num = min->num;min->num = t;
t = p->score;p->score = min->score;min->score = t;
p = p->next;
}
return L1;
}
void print(stu *L)
{
stu *p = L->next;
while(p)
printf("%d %d\n", (5) ,p->score),p = p->next;
}
int main()
{
stu *L1,*L2,*L3;
int n,m;
scanf("%d%d",&n,&m);
L1 = create(L1,n);
L2 = create(L2,m);
L3 = (6) ;
print(L3);
return 0;
}
正确答案:
第一空:
(stu *)malloc(sizeof(stu))
第二空:
&p->score
第三空:
p = p->next
第四空:
q
第五空:
p->num
第六空:
addandsort(L1,L2)