#include <bits/stdc++.h>
using namespace std;
//结点
typedef struct Lnode {
int data;
struct Lnode *next;
}Lnode, *Linklist;
//尾插
void Creatlist(Linklist &L, int &e) {
Lnode *p = new Lnode;
p->data = e;
p->next = NULL; //处理新加入节点
Lnode *cur = L;
while (cur->next != NULL) {
cur = cur->next;
}
cur->next = p;
p->next = NULL;
}
//初始化
void Initlist(Linklist &L) {
L = new Lnode;
L->next = NULL;
}
//合并
void Merge(Linklist &L1, Linklist &L2, Linklist &L) {
Lnode *c1 = L1->next;
Lnode *c2 = L2->next;
Lnode *p = L; //结果
while (c1&&c2) {
if (c1->data == c2->data) {
p->next = c1;
p = p->next;
c1 = c1->next;
c2 = c2->next;
}
else if (c1->data > c2->data) {
p->next = c2;
p = p->next;
c2 = c2->next;
}
else {
p->next = c1;
c1 = c1->next;
p = p->next;
}
}
while (c1) {
p->next = c1;
c1 = c1->next;
p = p->next;
}
while (c2) {
p->next = c2;
c2 = c2->next;
p = p->next;
}
}
//打印
void Print(Linklist &L) {
Lnode *cur = L->next;
while (cur->next != NULL) { //cur->next:判断是否是最后一个
cout << cur->data << " ";
cur = cur->next;
}
cout << cur->data << endl; //最后一个元素输出后 无空格!
}
int main() {
int n, m;
while (scanf("%d %d",&n,&m)!=EOF) {
if (n == 0 && m == 0) break;
Linklist L1; nklist L; //结果
Initlist(L1); Initlist(L2); Initlist(L);
Linklist L2; Li
for (int i = 0; i < n; i++) { //建L1
int e;
cin >> e;
Creatlist(L1, e);
}
for (int i = 0; i < m; i++) { //建L2
int e;
cin >> e;
Creatlist(L2, e);
}
Merge(L1, L2, L);//合并
Print(L);
}
}
BJFU 225基于链表的两个递增有序序列的合并
最新推荐文章于 2024-07-25 17:45:03 发布