单链表-合并两个有序集合

最后合并的C也要有序,并且不能破坏A,B

cpp 复制代码
#include<iostream>
#include<cstring>
using namespace std;


typedef struct LNode {
	int data;
	struct LNode* next;
}LinkNode;
void Create(LinkNode*& L, int a[], int l)
{
	L = (LinkNode*)malloc(sizeof(LinkNode));
	LinkNode* q = L;
	for (int i = 0; i < l; i++) {
		LinkNode* p = (LinkNode*)malloc(sizeof(LinkNode));
		p->data = a[i];
		q->next = p;
		q = p;
	}
	q->next = NULL;
}
void Union2(LinkNode* A, LinkNode* B, LinkNode*& C) {
	LinkNode* pa, * pb, * pc,*p;
	C= (LinkNode*)malloc(sizeof(LinkNode));
	pc = C;
	pa = A->next;
	pb = B->next;//因为建表都是有建头结点的
	while (pa != NULL && pb != NULL) {
		p = (LinkNode*)malloc(sizeof(LinkNode));
		if (pa->data > pb->data) {
			p->data = pb->data;
			pb = pb->next;
		}
		else if(pa->data< pb->data){
			
			p->data = pa->data;
			pa = pa->next;
		}
		else {
			p->data = pa->data;
			pa = pa->next;
			pb = pb->next;
		}
		pc->next = p;
		pc = p;
	}
	while (pa != NULL) {
		p= (LinkNode*)malloc(sizeof(LinkNode));
		p->data = pa->data;
		pc->next = p;
		pc = p;
		pa = pa->next;
	}
	while (pb != NULL) {
		 p = (LinkNode*)malloc(sizeof(LinkNode));
		p->data = pb->data;
		pc->next = p;
		pc = p;
		pb = pb->next;
	}
	pc -> next = NULL;
}
void display(LinkNode* L) {

	LinkNode* p = L->next;
	while (p != NULL) {
		cout << p->data << " ";
		p = p->next;
	}
}
int main() {
	int a1[] = { 1,2,3,4,5 }, b1[] = { 4,5,6 };
	LinkNode* A, * B, * C;
	Create(A, a1, 4);
	display(A);
	cout << endl;
	Create(B, b1, 3);
	display(B);
	cout << endl;
	Union2(A, B, C);
	display(C);
	return 0;
}

细节在上一篇博客里;有序合并的思路就就是,同时循环两个表比较,最后在判断哪个表没空就把剩余的加进去

相关推荐
OPEN-F3 小时前
ROS2系列教程:上位机建图与导航(原理综合)
算法·机器人
weixin_307779133 小时前
C++代码实现MATLAB中的fitrtree函数功能
开发语言·c++·算法·matlab
tomwang03223 小时前
路径优化建模、优化算法分类及工程化小结
算法·数学建模·分类
小羊没烦恼!3 小时前
Ajax与JSON的一些总结
android·java·前端·数据库·mysql·算法·okhttp
2501_926978333 小时前
人机通信协议--人和机器之间的交互想象
人工智能·经验分享·算法·ai写作
行者全栈架构师3 小时前
【鸿蒙心迹】互动卡片全链路——把核心功能放到桌面(FormKit 实战)(HarmonyOS 7.x)
前端·算法·架构
无定义_4 小时前
10.11日常训练
算法
Code_Solitude4 小时前
c语言:关于qsoet函数知识点
c语言·数据结构·算法
Nil2084 小时前
leetcode 49字母异位分组
算法·leetcode·哈希算法
weixin_307779134 小时前
C++代码实现MATLAB中的spectralcluster函数功能
开发语言·c++·算法·matlab