将两个有序链表合并为一个链表任然有序,两个链表都是从大到小或者从小到大。
方法:
1.将两个链表连起来,对所有元素进行排序。
2.因为两个链表的长度可能不同,则将两链表相同长度的一部分进行排序,将较长链表的后边直接连接在排好序的链表后边

#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{int data;struct Node *next;
}Node;
Node* Hebing(Node* head1, Node* head2)  //合并两个有序链表成一个有序链表
{if(head1 == NULL)return head2;if(head2 == NULL)return head1;Node *head, *p1, *p2;if(head1->data < head2->data)   //确定好合并后的头结点 (从小到大) {head = head1;p1 = head1->next;p2 = head2;}else{head = head2;p1 = head1;p2 = head2->next;} Node *move = head;   //定义一个临时指针,(不用创建新链表占用空间)将两个链表连接在一起while(p1 && p2)      //p1,p2都不为空 {if(p1->data <= p2->data){move->next = p1;move = p1;p1 = p1->next;}else{move->next = p2;move = p2;p2 = p2->next;}}if(p1)   //p1比p2长,比较完最小长度的链表节点后,因为有序,剩下的直接加到比较完的后边 move->next = p1;     // 补齐p1剩余未比较的节点if(p2)move->next = p2;     // 补齐p2剩余未比较的节点return head;
}
Node* Creat()      //链表的创建
{Node *head,*p,*s;head =(struct Node *)malloc(sizeof(struct Node));int x,flag = 1;if(head == NULL)printf("头结点创建失败!\n");p = head;   //p永远指向head的尾部 printf("输入(以0结束,从小到大):");while(flag){scanf("%d",&x);if(x != 0){s =(struct Node *)malloc(sizeof(struct Node));s->data = x;p->next = s;p = s; }elseflag = 0;  }head = head->next;p->next = NULL;printf("链表建立成功!\n"); return head;
}
void Print(Node *head)
{Node *p = head;while(p!=NULL){printf("%d  ",p->data);p = p->next;}//printf("\n");
}
int main()
{Node *head1 = Creat();Node *head2 = Creat();Node *head3 = Hebing(head1, head2);Print(head3);return 0;
}

将两个有序链表合并为一个链表任然有序C语言相关推荐

  1. 链表面试题3:将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成 的。

    链表面试题3:将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成 的. 首先我们的思想是将得一个链表和第二个链表的每个结点进行比较,谁小谁就插入到新链表的最后. ...

  2. 【数据结构笔记】将两个递增的有序链表合并为一个递增的有序链表

    将两个递增的有序链表合并为一个递增的有序链表.要求结果链表仍使用原来两个链表的存储空间, 不另外占用其它的存储空间.表中不允许有重复的数据. [题目分析] 合并后的新表用头指针Lc指向,pa和pb分别 ...

  3. c语言将两个有序表合并为一个有序表,c语言实现两个有序链表的合并(代码示例)...

    本篇文章通过代码示例介绍一下使用c语言合并两个有序链表的方法.有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助. 教程推荐:<c语言教程视频> c语言实现两个有序链表的合并 ...

  4. 将两个单链表合并为一个单链表

    将两个单链表合并为一个单链表(C语言实现) 目的:掌握单链表的应用和算法设计 内容:L1 =(x1, x2, -, xn ),L2 =(y1, y2, -, ym ),他们是两个线性表,采用带头结点的 ...

  5. 两个或多个有序数组合并为一个有序数组

    要求: 不使用for循环 不使用API方法进行数据迁移 : System.arraycopy(int[] a,-); Arrays.copyOf(int[] a,-); 一.两个有序数组合并为一个有序 ...

  6. python字典通讯录_Python利用字典将两个通讯录文本合并为一个文本实例

    本文实例主要实现的是利用字典将两个通讯录文本合并为一个文本,具体代码如下: def main(): ftele1=open("d:\TeleAddressBook.txt",&qu ...

  7. 数据结构例16.试设计一个算法, 使得在一个有序的单链表中插入一个元素后仍然有序。

    /* 16.试设计一个算法, 使得在一个有序的单链表中插入一个元素后仍然有序. */ # include <iostream> # include <stdlib.h> # i ...

  8. PDF合并:如何将两个PDF文件合并成一个PDF文件

    PDF文件是我们在工作中经常能够用到的文件,尤其是在办公中会遇到很多PDF文件在传输的过程中为了传输更快被拆分成了几个PDF文件,但是要找一个完整的PDF文件就需要把两个被拆分的PDF文件合并成一个P ...

  9. java jdk8 使用stream实现两个list集合合并成一个list集合(对象属性的合并)

    java使用stream实现list中对象属性的合并: 根据两个List中的某个相同字段合并成一条List,包含两个List中的字段 目录 一.前言 二.示例 示例1:java8 合并两个 list& ...

最新文章

  1. 一个高并发请求的算法
  2. 高斯混合模型--GMM(Gaussian Mixture Model)
  3. JAVA碰撞检测无效_碰撞检测不适用于Pygame中的精灵
  4. 浅谈JavaScript中闭包
  5. pytest+allure测试框架搭建
  6. 爬虫的单线程+多任务异步协程:asyncio 3.6
  7. 云服务器cpu系列,云服务器cpu系列
  8. Java 使用SAX解析XML文档
  9. access两位小数不进位_人教版小学数学三年级下册笔算乘法(不进位)公开课优质课课件教案视频...
  10. 产品研发过程管理专题——产品需求分析原则二
  11. PTA—计算摄氏温度(C语言)
  12. PowerShell在Exchange2010下快速开启邮箱[续]
  13. 14. 税收规则(Tax Rules)
  14. Realtek:电脑更新后,在主机前面板插上耳机没有声音,怎么解决?
  15. oracle startup mount是什么意思,startup,startup mount,startup nomount之间的区别-Oracle
  16. 看表空间大小,查询表空间名的表空间文件存放位置,矿展表空间,查看表空间名称...
  17. PHP 导出 Excel 换行不显示
  18. html底部添加备案号,网站底部怎么放备案号 WordPress、CMS、discuz等常见程序添加方法...
  19. 第三十四篇 源极跟随器
  20. 商场百货会员引流 购物中心会员拉新方式

热门文章

  1. 保研计算机辅助翻译,本科2013级推免生寄语
  2. vmos切换安卓版本_安卓之中还能运行安卓!神奇的安卓虚拟机App
  3. SAP Spartacus的版本机制
  4. 使用Java代码在SAP Marketing Cloud上创建Contact数据
  5. 如何为SAP Cloud for Customer Lead页面配置自定义的Source字段
  6. JAM - get self detail information
  7. CEC tile configuration of Launchpad shell is returned by http request
  8. windows环境里React-Native运行失败的原因之一,缺少依赖
  9. Element.prototype.addDependent will call addAggregation
  10. smart field demo1 - how does system know currency needs to be rendered