概述
本篇文章通过代码示例介绍一下使用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("%dt", 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语言实现两个有序链表的合并(代码示例)的全部内容,希望文章能够帮你解决c语言实现两个有序链表的合并(代码示例)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复