有序单链表的合并

cpp 复制代码
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct LinkNode {
	ElemType data;
	LinkNode* next;
}LinkNode,*LinkList;
void creatLinkList(LinkList& L, int m) {
	L = (LinkNode*)malloc(sizeof(LinkNode));
	L->next = NULL;
	int num;
	for (int i = 0; i < m; i++) {
		scanf("%d", &num);
		LinkNode* pnode = (LinkNode*)malloc(sizeof(LinkNode));
		pnode->data = num;
		pnode->next = L->next;
		L->next = pnode;
	}
}
void printLinkList(LinkList L) {
	LinkNode* pcur = L->next;
	while (pcur != NULL) {
		printf("%d ", pcur->data);
		pcur = pcur->next;
	}
}
void insert(LinkNode*& ptail, LinkNode* pnode) {
	if (ptail->data == pnode->data) {
		free(pnode);
	}
	else {
		pnode->next = ptail->next;
		ptail->next = pnode;
		ptail = pnode;
	}
}
LinkList mergeTwoList(LinkList& La, LinkList& Lb) {
	LinkNode* pcurA = La->next;
	LinkNode* pcurB = Lb->next;
	LinkList Lc = La;
	Lc->next = NULL;
	LinkNode* ptail = Lc;
	free(Lb);
	while (pcurA != NULL && pcurB != NULL) {
		if (pcurA->data < pcurB->data) {
			LinkNode* pnode = pcurA;
			pcurA = pcurA->next;
			insert(ptail, pnode);
		}
		else {
			LinkNode* pnode = pcurB;
			pcurB = pcurB->next;
			insert(ptail, pnode);
		}
	}
	if (pcurA != NULL) {
		ptail->next = pcurA;
	}
	if (pcurB != NULL) {
		ptail->next = pcurB;
	}
	return Lc;
}
int main() {
	LinkList La, Lb;
	int m, n;
	scanf("%d", &m);
	creatLinkList(La, m);
	scanf("%d", &n);
	creatLinkList(Lb, n);
	LinkList Lc=mergeTwoList(La, Lb);
	/*printLinkList(La);
	printf("\n");
	printLinkList(Lb);*/
	printLinkList(Lc);
	return 0;
}
相关推荐
茉莉玫瑰花茶7 分钟前
算法 --- 字符串
算法
博笙困了17 分钟前
AcWing学习——差分
c++·算法
NAGNIP21 分钟前
认识 Unsloth 框架:大模型高效微调的利器
算法
NAGNIP21 分钟前
大模型微调框架之LLaMA Factory
算法
echoarts22 分钟前
Rayon Rust中的数据并行库入门教程
开发语言·其他·算法·rust
Python技术极客28 分钟前
一款超好用的 Python 交互式可视化工具,强烈推荐~
算法
徐小夕31 分钟前
花了一天时间,开源了一套精美且支持复杂操作的表格编辑器tablejs
前端·算法·github
小刘鸭地下城44 分钟前
深入浅出链表:从基础概念到核心操作全面解析
算法
小刘鸭地下城1 小时前
哈希表核心精要:从 O(1) 原理到链式地址与开放寻址
算法
今后1231 小时前
【数据结构】二叉树的概念
数据结构·二叉树