算法题:合并两个有序的链表
来源:互联网 发布:苹果6无4g网络只显示e 编辑:程序博客网 时间:2024/05/29 06:35
说明:本文仅供学习交流,转载请标明出处,欢迎转载!
题目:已知有两个有序的单链表,其头指针分别为head1和head2,实现将这两个链表合并的函数:
Node* ListMerge(Node *head1,Node *head2)
这个算法很像我们排序算法中的归并排序,只能说“很像”,因为思想是一样的,但是这个与归并排序还是有区别的,区别如下:
1.归并排序是针对有序数组,而这里是有序链表;
2.归并排序排序的时间复杂度为o(nlogn),而这里的时间复杂度最坏情况下为O(m+n),最好的情况下为O(min{m,n})。
3.归并排序需要重新申请空间,而这里无需再重新申请空间,只需改变链表结点的指针指向。
而这里算法的思想跟归并排序是一样的,都是对两个待归并的线性表分别设置1个指针,比较这两个当前指针的大小,将小的结点加入到合并后的线性表中,并向后移动当前指针。若两个线性表中,至少有一个表扫描完,走将对应的另一个表之间整体添加到合并后的线性表中。在这里:链表和数组的区别在于,链表只需要改变当前合并序列尾指针的位置,而数组则要将剩下的值依次复制到归并表的尾部。
算法的递归实现如下:
算法的非递归实现如下:
整个测试代码如下:
测试结果如下:
参考资料-------------《剑指offer》
0 0
- 合并两个有序链表的算法
- 算法:两个有序链表的合并
- 算法题:合并两个有序的链表
- 算法题:合并两个有序的链表
- 有序的合并两个有序链表
- 两个有序链表合并算法
- 算法学习----合并两个有序的链表
- 两个有序链表的合并问题
- 实现两个有序链表的合并
- 合并两个有序的链表
- 合并两个有序的链表
- 合并两个有序的链表
- 两个有序链表的合并
- 合并两个有序的链表
- 两个有序单向链表的合并
- 实现两个有序链表的合并
- 合并两个有序的链表
- 合并两个有序的链表
- [Leetcode] Unique Binary Search Trees
- Extreme Summit交换机ACL配置
- 判断一个数是否为质数
- C/C++中使用static关键字定义或声明静态对象
- 欢迎使用CSDN-markdown编辑器
- 算法题:合并两个有序的链表
- iOS编译通用framework
- 第55篇 Chrome扩展USB开发(一)及PHP研究 Saturday
- MyBatis 插入空值时,需要指定JdbcType
- Ubuntu 16.04 安装 R 环境
- Escape from the Hell(暴力瞎搞)
- kinect for xboxOne在win10中的SDK安装成功
- php面向对象语法3 继承extends
- codeforces723C- Polycarp at the Radio-greedy