ImageVerifierCode 换一换
格式:DOCX , 页数:10 ,大小:19.14KB ,
资源ID:7832974      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-7832974.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(单链表合并为有序链表.docx)为本站会员(hskm5268)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

单链表合并为有序链表.docx

1、1、 已知两个链表 head1 和 head2 各自有序,请把它们合并成一个链表仍然有序,要求用递归 方法实现。#include #include struct Nodeint num;Node *next;Node *Merge(Node *head1,Node *head2)if(head1=NULL)return head2;if(head2=NULL)return head1;Node *head=NULL;if(head1-numnum)head=head1;head-next=Merge(head1-next,head2);elsehead=head2;head-next=Merg

2、e(head1,head2-next);return head;2、递增有序的 2 个单链表合并成一个递增有序的单链表,不用任何库函数调用 /*题目描述: 2 个递增有序的单链表,请你把它两个合并成一个有序的单链表,分普通和不能用任何库函数 2 种方法作者: xiaocui时间: 2007.11.4版本: v1.0*/* 说明: 如果采用一般的做法,直接申请新的空间,组成一个新的单链表,直接进行归并就可以得到整体的有序序列,这个相对比较简单。如果不能用任何库函数,也就是不能利用 malloc 分配内存,就是要利用现有的 2 个链表,进行元素交换得到最后有序的链表。*/#include usin

3、g namespace std;/* 单链表节点 */struct nodeint value;node* next;/* 给单链表添加节点 */void insertNode(node* head, int value)node* p = head-next;if ( p = NULL )p = new node;p-value = value;p-next = NULL;head-next = p;return;while ( p-next != NULL )p = p-next;node* tmp = new node;tmp-value = value;tmp-next = NULL;

4、p-next = tmp;/* 遍历输出链表节点 */void print(node* head)node* p = head-next;while ( p != NULL )cout value next;cout next = NULL;node* p = headA-next;node* q = headB-next;if ( p = NULL )return headB;if ( q = NULL )return headA;while ( (p != NULL) insertNode(head, q-value);p = p-next;q = q-next;else if ( p-v

5、alue value )insertNode(head, p-value);p = p-next;else if ( p-value q-value )insertNode(head, q-value);q = q-next;while ( p != NULL )insertNode(head, p-value);p = p-next;while ( q != NULL )insertNode(head, q-value);q = q-next;return head;/* 下面实现不使用任何库函数, 利用交换的方法在原空间实现整体有序。 方法是先确定哪一个链表的第一个节点的值小,把这个链表的

6、头结点作为合并后链表的头结点,然后比较 2 个有序链表的当前节点的值,如果代表最后合并链表的值小,则不用交换,否则把两个值交换,最后合并链表始终保持两个值中的小值。另一个链表由于交换了一个元素,当前元素可能影响该链表的有序递增,对其进行调整使其保持递增有序,然后重复上述动作,直到一个链表遍历结束,然后把剩余的链表连接起来就行。*/* 调整链表的第一个节点,使其变成递增有序 */void chg2sort(node* head, node* node* s = head;while ( s-next != p ) /s 指向 p 的前一个节点s = s-next;/下面的一段找到第一个大于 p

7、节点值的节点node* q = p;node* r = q;while ( q != NULL )if ( q-value value )r = q; /r 始终指向 q 的前一个节点q = q-next;elsebreak;/下面调整指针,其实可以统一写出来,为了阅读清晰把 q 为 NULL 和非 NULL 分开写出来if ( q = NULL )r-next = p;s-next = p-next;p-next = NULL;else if ( q != NULL )s-next = p-next;r-next = p;p-next = q;/由于链表进行了调换,当前链表指针也需要改变p

8、= s-next;/* 两个有序链表进行合并 */node* merge(node* head1, node* head2)node* head; /合并后的头指针node* p = head1-next;node* q = head2-next;/有一个链表为空的情况,直接返回另一个链表if ( p = NULL )head = head2;return head;else if ( q = NULL )head = head1;return head;/两个都不为空,先确定哪个链表作为合并后的链表if ( (p != NULL) elsehead = head2;node* p_prior

9、; /始终指向 p 节点的前一个节点node* q_prior;while ( (p != NULL) p = p-next;else if ( head = head2 )/进行当前节点值的交换int tmp = p-value;p-value = q-value;q-value = tmp;chg2sort(head1, p); /交换元素后的调整q_prior = q;q = q-next;else if ( p-value = q-value )p_prior = p;p = p-next;q_prior = q;q = q-next;else if ( p-value q-value

10、 )if ( head = head1 )int tmp = p-value;p-value = q-value;q-value = tmp;chg2sort(head2, q);p_prior = p;p = p-next;else if ( head = head2 )q_prior = q;q = q-next;if ( p != NULL )q_prior-next = p;if ( q != NULL )p_prior-next = q;return head;int main()/* 建立有序链表 A */int a5 = 1, 5, 8, 10, 20;node* headA = new node;headA-next = NULL;for (int i = 0; i next = NULL;for (int i = 0; i next = NULL;for (int i = 0; i next);print(headC);head = merge(headA, headB);print(head);return 0;

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报