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

最后合并的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;
}

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

相关推荐
geats人山人海2 小时前
数据结构第六章c语言 树的存储下二叉树的概念和存储
c语言·数据结构·算法
漂流瓶jz2 小时前
UVA-12627 奇怪的气球膨胀 题解答案代码 算法竞赛入门经典第二版
算法·图论·递归·aoapc·算法竞赛入门经典·uva·12627
jarvisuni2 小时前
DeepSeekFlash前端依旧拉垮,而且变慢了很多!
前端·javascript·算法
kobesdu3 小时前
流形上的优化:SO(3)与SE(3)的广义加减法在FAST-LIO中如何简化状态估计
人工智能·算法·fastlio
白狐_7983 小时前
408 数据结构算法题 01:线性表暴力求解保分指南
java·数据结构·算法
乐观勇敢坚强的老彭3 小时前
C++信奥:开关门、开关灯问题
开发语言·c++·算法
冻柠檬飞冰走茶3 小时前
PTA基础编程题目集 7-31 字符串循环左移(C语言实现)
c语言·开发语言·数据结构·算法
Hi李耶3 小时前
【LeetCode】4-寻找两个正序数组的中位数
算法·leetcode·职场和发展
图灵机z4 小时前
【算法提高课】AcWing 1027. 方格取数 长期攻克提高课-day3(3/219)
算法
hans汉斯4 小时前
计算机科学与应用|改进MeanShift算法在智能监控视频中的应用研究
图像处理·人工智能·功能测试·深度学习·算法·音视频