将两个有序链表合并,合并后仍然有序
思路:因为A,B链表中元素递增有序,要使归并后的C也递增有序,可以每次从A、B中挑出最小的元素插入C的尾部,这样循环插入完成后,C也一定是递增有序的。
需要注意的点是,A、B中的元素有可能一个已经全部被插入到C中,而另一个还没插完。
1 struct LNode{ 2 int data; 3 LNode *next; 4 } 5 6 void Merge(LNode *A,LNode *B,LNode *&C) 7 { 8 LNode *p = A->next; // 定义p结点跟踪 A中的结点 9 LNode *q = B->next; // 定义q结点跟踪 B中的结点 10 11 C = A; 12 C->next = NULL; 13 free(B); 14 15 LNode *r = C; // 定义一个跟踪结点,永远指向C的终端结点 16 17 while(p!=NULL&&q!=NULL){ 18 if(p->data <= q->data){ 19 r->next = p; 20 p = p->next; 21 r = r->next; 22 }else{ 23 r->next = q; 24 q = q->next; 25 r = r->next; 26 } 27 } 28 29 if(p!=NULL) r->next = p; 30 if(q!=NULL) r->next = q; 31 }
如果题这样改:A、B递增有序,合并成C后,C递减有序,怎么做? 前面题用的是尾插法插入元素,如果使用头插法插入元素,就可以得到一个递减序列。
1 struct LNode{ 2 int data; 3 LNode *next; 4 } 5 6 void merge(LNode *A,LNode *B,LNode *&C) 7 { 8 LNode *p = A->next; 9 LNode *q = B->next; 10 LNode *s; 11 C = A; // 使用A的头结点作为C的头结点,然后建立一个空链表 12 C->next= NULL; 13 free(B); // 释放B的头结点 14 15 while(p!=NULL&&q!=NULL){ 16 if(p->data<=q->data){ 17 s = p; 18 p = p->next; 19 s->next = C->next; 20 C->next = s; 21 }else{ 22 s = q; 23 q = q->next; 24 s->next = C->next; 25 C->next = s; 26 } 27 } 28 while(p!=NULL){ 29 s = p; 30 p = p->next; 31 s->next = C->next; 32 C->next = s; 33 } 34 while(q!=NULL){ 35 s = q; 36 q = q->next; 37 s->next = C->next; 38 C->next = s; 39 } 40 }
转载于:https://www.cnblogs.com/ll-10/p/9698815.html
将两个有序链表合并,合并后仍然有序相关推荐
- c语言实现两个有序链表的合并(代码示例)
c语言实现两个有序链表的合并: 现有两个有序单链表,通过代码实现将两个单链表合并为一个有序的新表,要求使用旧表的空间,不能新分配内存 #include #include typedef struct ...
- c语言将两个有序表合并为一个有序表,c语言实现两个有序链表的合并(代码示例)...
本篇文章通过代码示例介绍一下使用c语言合并两个有序链表的方法.有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助. 教程推荐:<c语言教程视频> c语言实现两个有序链表的合并 ...
- 数据结构——有序链表的合并,链表实现一元多项式相加
1.有序链表的合并 void Connect(LinkList a, LinkList b, LinkList& c) {LNode* pa, * pb, * pc;//三个结点指针pa = ...
- 两个list关联合并_算法分享---两个有序链表的合并(C语言)
定义两个指针,分别指向两个链表的头结点,在两个链表都不为空时, 比较两个链表结点的值的大小. 若链表l1的节点大于l2的节点,则将l1的节点值赋值给l3.l1的指针指向下一个节点. 反之,则则将l2的 ...
- Java实现两个递增有序链表合并成一个递增有序链表和两个非递减有序链表合成一个非递增有序链表
代码如下: package sjjgniub;import java.util.LinkedList; import java.util.Scanner;@SuppressWarnings(" ...
- 合并两个有序链表 java_合并两个有序链表
将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. /*** Definition for singly-linked list.* struct ListN ...
- pta两个有序链表的合并_21. 合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出:1->1-> ...
- python合并k个有序链表_Leetcode合并K个升序链表(Python版本),LeetCode,python
一.描述 给你一个链表数组,每个链表都已经按升序排列.请你将所有链表合并到一个升序链表中,返回合并后的链表. 示例 1: 输入:lists = [[1,4,5],[1,3,4],[2,6]] 输出:[ ...
- C语言-两个单链表的合并
合并的函数: SLNode* merge(SLNode *head1,SLNode *head2,SLNode *head3) {SLNode *p1,*p2,*p3;p1=head1->nex ...
- 将两个有序链表合并成一个链表
代码实现功能如下:将两个有序链表合并成一个有序链表. 具体思路如下:首先自己调用链表的创建函数,手动创建两个有序链表,链表的创建以输入0作为截止标志.创建好两个有序链表之后,将两个链表的头结点进行比较 ...
最新文章
- java 连接mysql 8.0,java连接mysql 8.0的问题
- 数据结构之平衡树:2-3查找树的介绍——16
- 转:ObjectInputStream类和ObjectInputStream类的使用
- 【Docker】Error: No such image: gotok8s/kube-proxy:v1.16.5
- 关于海康相机ip地址无法更改问题
- MAC 安装oracle instantclient
- 【第四课】UAV倾斜摄影测量三维建模技术软件——Smart 3d
- B站五面面经(附过程、答案)
- excel打开密码忘记了_Excel工作表密码忘记了怎么办?
- 虚拟机怎样使用代理服务器上网,VMware虚拟机使用NAT模式上网的方法
- bin文件读写 - C/C++
- Python爬取网易云音乐歌手歌曲和歌单!推荐好听的歌吗?
- 泰拉瑞亚服务器搭建-瑟银灾厄-Centos
- 不用 IDE,仅用命令行 + SDK 开发 Android App
- php绑定银行卡实现,php网站如何绑定银行卡
- 抓包工具 HTTP Analyzer v7.5 的下载,安装,使用,破解说明
- 群响黄宝书:淘宝客历史沿革和新崛起的淘宝高手分享
- 【转】Kbps、KB、Mbps单位换算
- 异常记录 之 nested exception is java.lang.NoClassDefFoundError: com/lowagie/text/pdf/PdfContentByte
- Thymeleaf全解
热门文章
- hive操作create,alter等
- CHIL-SQL-FIRST() 函数
- android中webview loadUrl(String url,Map header)方法和postUrl(String url,byte[] postData)方法同时使用问题;...
- GNU make manual 翻译(六十一)
- ICCV2017: Unlabeled Samples Generated by GAN Improve the Person Re-Identification Baseline in Vitro
- A Multi-task Deep Network for Person Re-identification
- 哈夫曼编码(Huffman)Java实现代码简化版
- Ethernet/IP 学习笔记三
- 关于HTML下overflow-y:auto无效、清除HTML默认边距、解决去除手机访问网页时的左右多余空白的三个方法汇总
- System.window.media.color