#include <stdio.h>
#include <malloc.h>
//先创建链表
typedef struct student{
int number;
int gread;
struct student *next;
}*node,Node;
node creat(int n);//创建一个链表函数
void output(node1);//输出函数
void order(node11,node22);//排序函数
node creat(int s)
{
node head,p;
head=(node)malloc(sizeof(Node));
head->next=NULL;
node q=head;
int i;
for(i=0;i<s;i++)
{
p=(node)malloc(sizeof(Node));
scanf("%d%d",&(*p).number,&(*p).gread);
p->next=q->next;
q->next=p;
q=p;
}
return (head);//返回头结点
}
void output(node l)
{
l=l->next;
node q;
while(l!=NULL)
{
printf("%d %d\n",l->number,l->gread);
q=l;
l=l->next;
free(q);
}
}
void order(node l1,node l2)
{//l1和l2为头结点
node q;//min是个节点,不是int型
q=l1;
l2=l2->next;
while(q->next!=NULL)
{
q=q->next;
}
q->next=l2;//完成两个链表的链接
//现在变成一个链表,开始从小到大排序
q=l1->next;
node min;//min是个节点,不是int型
int n,g;//中间变量
node k;
//开始按照学号number从小到大排序
while(q!=NULL)
{
k=q;
int t=k->number;
min=k;
while(k!=NULL)
{
if(k->number<t)
{
t=k->number;//把小的节点的值给t
min=k;//把小的节点位置赋给min
}
k=k->next;
}
int n,g;//中间变量
n=q->number;
q->number=min->number;
min->number=n;
g=q->gread;
q->gread=min->gread;
min->gread=g;
q=q->next;
}
output(l1);
}
int main()
{
int n,m;
node head1,head2;
scanf("%d%d",&n,&m);
head1=creat(n);//创建A链表
head2=creat(m);//创建B链表
order(head1,head2);//链表排序
return 0;
}