c语言怎么实现有序链表的合并,代码是什么
导读:这篇文章主要为大家详细介绍了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语言怎么实现有序链表的合并,代码是什么”的内容了,通过以上内容的阐述,相信大家对c语言怎么实现有序链表的合并,代码是什么已经有了进一步的了解,如果想要了解更多相关的内容,欢迎关注网络,网络将为大家推送更多相关知识点的文章。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: c语言怎么实现有序链表的合并,代码是什么
本文地址: https://pptw.com/jishu/651764.html
