数据结构实验---合并两个非递减链表
描述
给定两个递增的整数序列A和B,利用链表表示序列A和B,将A和B合并为一个递增的有序序列C,序列C不允许有重复的数据。要求空间复杂度为O(1)。
输入
多组数据,每组数据有三行,第一行为序列A和B的长度n和m,第二行为序列A的n个元素,第三行为序列B的m个元素(元素之间用空格分隔)。n=0且m=0时输入结束。
输出
对于每组数据输出一行,为合并后的序列,每个数据之间用空格分隔。
输入样例 1
5 5
1 3 5 7 9
2 4 6 8 10
3 4
1 5 9
1 2 5 9
0 0
输出样例 1
1 2 3 4 5 6 7 8 9 10
1 2 5 9
#include<iostream> using namespace std; typedef struct LNode* List; struct LNode { int data; List next; }; void InitList(List &L) { L = new LNode; L->next = NULL; } void CreatList(List &L,int num) { L = new LNode; L->next = NULL; List r = L; for (int i = 0; i < num; i++) { List p = new LNode; cin >> p->data; p->next = NULL; r->next = p; r = p; } } List MergeList(List a,List b ) { List c; List pa, pb, pc; pa = a->next; pb = b->next; c = a; pc = c; while (pa&&pb) { if (pa->data < pb->data) { pc->next = pa; pc = pa; pa = pa->next; } else { if (pa->data > pb->data) { pc->next = pb; pc = pb; pb = pb->next; } else if (pa->data == pb->data) { pc->next = pa; pc = pa; pa = pa->next; pb = pb->next; } } } pc->next = pa ? pa : pb;//如果不是pa,可能是a 空了 delete b; return c; } void Print(List L) { List p = L->next; while (p->next) { cout << p->data << " "; p = p->next; } cout << p->data<<endl; } int main() { int n, m; while (cin>>n>>m&&(n != 0 || m != 0)) { List A, B; CreatList(A, n); CreatList(B, m); List C=MergeList(A, B); Print(C); } return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码