本篇文章通过代码示例介绍一下使用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;}

在这里插入图片描述

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

更多相关文章

  1. C语言怎么合并两个有序链表
  2. 两个Golang超大文件读取的方案
  3. go-carbon1.2.5版本发布,新增两个互转方法!
  4. php 修改、增加xml结点属性的实现代码
  5. 介绍数据库生成xml的两个简单示例代码
  6. 史上规模最大的中文知识图谱以及估值两个亿的 AI 核心代码
  7. Python有序字典的两个小“惊喜”~~
  8. Python 为什么只需一条语句“a,b=b,a”,就能直接交换两个变量?
  9. 图解 LeetCode 第 421 题:数组中两个数的最大异或值

随机推荐

  1. Android 设置系统SystemUI 顶部StatusBar
  2. Android之发送短信和接收验证码
  3. android应用去掉title bar 及全屏处理方
  4. Android 各种基础控件布局
  5. Android 8、Android 9获取手机序列号的兼
  6. Android(安卓)开源组件和第三方库汇总
  7. Kernel.org hacked – how to get Androi
  8. Android(安卓)-- Intent
  9. Android 实现全屏和无标题栏的显示
  10. Google Android(安卓)SDK开发范例-------