本篇文章通过代码示例介绍一下使用c语言合并两个有序链表的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。
教程推荐:《c语言教程视频》
c语言实现两个有序链表的合并
现有两个有序单链表,通过代码实现将两个单链表合并为一个有序的新表,要求使用旧表的空间,不能新分配内存
立即学习“C语言免费学习笔记(深入)”;
#include #include 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("该链表内容为:");while (l->next){printf("%d", l->next->a);l = l->next;}printf("");}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 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的数据:");printfList(LA);printf("LB的数据:");printfList(LB);list *LC = add(LA, LB);//输出合并后的新表printfList(LC);system("pause");return 0;}
登录后复制
更多编程相关知识,请访问:编程入门!!
以上就是c语言实现两个有序链表的合并(代码示例)的详细内容,更多请关注【创想鸟】其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。
发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2492280.html