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

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

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

相关推荐
All for pursuit.2 小时前
【回溯-7】494.目标和
数据结构·c++·算法·leetcode
白杨尚青2 小时前
C++入门篇(十三):vector(上)——动态数组:构造、空间增长与迭代器失效
开发语言·c++·笔记·算法·stl
Jasmine_llq3 小时前
《P17461 [GESP202609 八级] 生成树计数》
算法·栈·tarjan 算法·边双连通分量·深度优先搜索 dfs·tarjan 保存当前路径节点·模乘法
Jasmine_llq3 小时前
《P17462 [GESP202609 八级] 末班车》
算法·dijkstra 算法·最大化版本,求最长可行值·建反向图(逆图 / 反转边)·多源 dijkstra 思想·对每个终点单独跑一遍djst·离线预处理 + 在线查询
the3clipse3 小时前
H.265熵编码核心:CABAC自适应二进制算术编码详解——如何将语法元素高效压缩为比特流
人工智能·算法·视频编码·h.265·hevc·cabac·cavlc
CQU_JIAKE3 小时前
10.4【A】
算法
Godspeed Zhao4 小时前
现代智能雷达技术19——算法(5)
算法
(Charon)4 小时前
【C++面试】RAII到底是什么:从资源管理理解C++对象生命周期
c++·算法·面试
Omics Pro4 小时前
之江实验室NAR|虚拟细胞3阶段训练范式
数据库·人工智能·算法·机器学习·自然语言处理
Tisfy4 小时前
LeetCode 0678.有效的括号字符串:O(n)+O(1)一次遍历
算法·leetcode·字符串·题解·贪心·括号匹配