算法笔记练习 题解合集
题目
题目描述
已有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 <iostream>
using namespace std;
struct Lnode {
int id, grade;
Lnode *next;
};
void insertNode(Lnode *&head) {
Lnode *p = head;
Lnode *temp = new Lnode;
scanf("%d%d", &temp->id, &temp->grade);
while (p->next && p->next->id < temp->id)
p = p->next;
temp->next = p->next;
p->next = temp;
}
void showLinklist(Lnode *&head) {
Lnode *p = head->next;
while (p) {
printf("%d %d\n", p->id, p->grade);
p = p->next;
}
}
int main() {
int n, m, sum;
scanf("%d%d", &n, &m);
sum = n + m;
Lnode *head = new Lnode;
head->next = nullptr;
while (sum--)
insertNode(head);
showLinklist(head);
return 0;
}