题目链接:http://codeup.cn/problem.php?cid=100000607&pid=1
题目描述
已有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 <cstdio>
#include <cstdlib>
struct node {
int id;
int data;
node* next;
};
void insert(node* head, node* q) {
node* p = head;
while(p->next != NULL && p->next->id < q->id) {
p = p->next;
}
q->next = p->next;
p->next = q;
}
int main() {
int n, m, id, data;
while(scanf("%d%d", &n, &m) != EOF) {
node* head = new node;
head->next = NULL;
for(int i = 0; i < n + m; i++) {
scanf("%d%d", &id, &data);
node* q = new node;
q->id = id;
q->data = data;
insert(head, q);
}
node* p = head->next;
while(p != NULL) {
printf("%d %d\n", p->id, p->data);
p = p->next;
}
}
}