c语言实现两个有序链表的合并(代码示例)

互联网 20-10-26
本篇文章通过代码示例介绍一下使用c语言合并两个有序链表的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

教程推荐:《c语言教程视频》

c语言实现两个有序链表的合并

现有两个有序单链表,通过代码实现将两个单链表合并为一个有序的新表,要求使用旧表的空间,不能新分配内存

#include <stdio.h>#include <stdlib.h>typedef struct List{ 	int a; 	struct List *next;}list;void newList(list *l){ 	//初始化头节点 	l->next = NULL;}void setList(list * l){ 	//建立链表 	int i = 1; 	int j; 	while (i) 	{ 		scanf_s("%d", &j); 		if (j == -1) 		{ 			i = 0; 		} 		else 		{ 			list *l1 = (list *)malloc(sizeof(list));//为新的结点分派内存 			l1->a = j;//储存数据 			/* 			将最后结点的next区域指向新结点 			将新结点的next区域指向设置为空 			*/ 			l->next = l1; 			l1->next = NULL; 			l = l->next; 		} 	}}void printfList(list *l){ 	printf("该链表内容为:\n"); 	while (l->next) 	{ 		printf("%d\t", l->next->a); 		l = l->next; 	} 	printf("\n");}list *add(list *LA, list *LB){ 	//记录两个链表的头结点 	list *la=LA; 	list *l = LA; 	list *lb = LB; 	//移动指针 	LA = LA->next; 	LB = LB->next; 	la->next = NULL; 	while (LA!=NULL&&LB!=NULL) 	{ 		/* 		将两个结点的数据进行比较,数据较小的结点接在头结点后面, 		*/ 		if (LA->a < LB->a) 		{ 			la->next = LA; 			la = LA; 			LA = LA->next; 		} 		else 		{ 			la->next = LB; 			la = LB; 			LB = LB->next; 		} 	} 	//若其中一个链表的结点已经全接在新表中则将另一个链表的剩余结点接在新表的后面 	if (LA) 	{ 		la->next = LA; 	} 	if(LB) 	{ 		la->next = LB; 	} 	free(lb); 	return l;}int main(){ 	//为结点分配内存 	list *LA = (list *)malloc(sizeof(list)); 	list *LB = (list *)malloc(sizeof(list)); 	//初始化结点 	newList(LA); 	newList(LB); 	//建立链表 	setList(LA); 	setList(LB); 	//输出链表的内容 	printf("LA的数据:\n"); 	printfList(LA); 	printf("LB的数据:\n"); 	printfList(LB); 	list *LC = add(LA, LB); 	//输出合并后的新表 	printfList(LC); 	system("pause"); 	return 0;}

更多编程相关知识,请访问:编程入门!!

以上就是c语言实现两个有序链表的合并(代码示例)的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
标签: 有序链表
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:c语言程序的执行总是起始于什么?

相关资讯