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

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

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

相关推荐
NAGNIP16 小时前
大模型框架性能优化策略:延迟、吞吐量与成本权衡
算法
美团技术团队17 小时前
LongCat-Flash:如何使用 SGLang 部署美团 Agentic 模型
人工智能·算法
Fanxt_Ja1 天前
【LeetCode】算法详解#15 ---环形链表II
数据结构·算法·leetcode·链表
侃侃_天下1 天前
最终的信号类
开发语言·c++·算法
茉莉玫瑰花茶1 天前
算法 --- 字符串
算法
博笙困了1 天前
AcWing学习——差分
c++·算法
NAGNIP1 天前
认识 Unsloth 框架:大模型高效微调的利器
算法
NAGNIP1 天前
大模型微调框架之LLaMA Factory
算法
echoarts1 天前
Rayon Rust中的数据并行库入门教程
开发语言·其他·算法·rust
Python技术极客1 天前
一款超好用的 Python 交互式可视化工具,强烈推荐~
算法