【问题描述】
已有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
#include
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;
}
填空如下,供参考:
#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 = (stu*)malloc(sizeof(stu)); //(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, &p->score); //(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)
p = p->next; //(3);
p->next = L2->next;
p = L1->next;
while (p)
{
min = p;
q = p->next;
while (q) //(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",p->num , p->score), p = p->next; //(5)
}
int main()
{
stu* L1, * L2, * L3;
int n, m;
scanf("%d%d", &n, &m);
L1 = create(L1, n);
L2 = create(L2, m);
L3 = addandsort(L1, L2); //(6);
print(L3);
return 0;
}