合并两个排序的链表递归和非递归C++实现
题目描述:
输入两个单调递增的链表,输出两个链表合成后的链表,要求合成后的链表满足单调不减规则。
1、分析
已知输入的两个链表递增有序,要使输出的链表依然递增有序,可以依次从输入的两个链表中挑选最小的元素插入到输出的链表尾部,便可实现输出链表递增有序。
2、数据结构定义
- struct ListNode {
- int val;
- struct ListNode *next;
- ListNode(int x) : val(x), next(NULL) {}
- };
3、递归实现
- /*递归实现合并两个排序链表*/
- ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
- {
- if(pHead1 == NULL)
- return pHead2;
- if(pHead2 == NULL)
- return pHead1;
- if(pHead1->val < pHead2->val)
- {
- pHead1->next = Merge(pHead1->next, pHead2);
- return pHead1;
- }
- else
- {
- pHead2->next = Merge(pHead1, pHead2->next);
- return pHead2;
- }
- }
4、非递归实现:
- /*非递归实现合并两个排序链表*/
- ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
- {
- ListNode *pHead = new ListNode();
- ListNode *p = pHead;
- while(pHead1 != NULL && pHead2 != NULL)
- {
- if(pHead1->val < pHead2->val)
- {
- p->next = pHead1;
- pHead1 = pHead1->next;
- }
- else
- {
- p->next = pHead2;
- pHead2 = pHead2->next;
- }
- p = p->next;
- }
- if(pHead1 != NULL)
- {
- p->next = pHead1;
- }
- if(pHead2 != NULL)
- {
- p->next = pHead2;
- }
- return pHead->next;
- }
5、总结
这道题使对单链表操作比较经典的题目,无论是考研还是面试出现的概率都非常高。题目的思路较为简单,编码实现稍微难点,难度虽不大,但能考察编码基础功力和对单链表的深一层的理解,所以须熟练掌握。
合并两个排序的链表递归和非递归C++实现的更多相关文章
- [剑指offer]25.合并两个排序的链表(迭代+递归)
25.合并两个排序的链表 题目 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的. 示例1: 输入:1->2->4, 1->3->4 输出:1-> ...
- 剑指Offer面试题:16.合并两个排序的链表
PS:这也是一道出镜率极高的面试题,我相信很多童鞋都会很眼熟,就像于千万人之中遇见不期而遇的人,没有别的话可说,唯有轻轻地问一声:“哦,原来你也在这里? ” 一.题目:合并两个排序的链表 题目:输入两 ...
- 剑指offer面试题17:合并两个排序的链表
题目:输入两个递增排序的链表,合并这两个链表并使新链表中的节点人是按照递增排序的.解题思路:两个链表分别都已经是有序的了,遍历链表的时候只要比较两个链表当前位置大小,取出最小的添加到新链表中. 可以有 ...
- 《剑指offer》 合并两个排序的链表
本题来自<剑指offer> 合并两个排序的链表 题目: 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 思路: A:采用递归的方式(C++ C ...
- 《剑指offer》— JavaScript(16)合并两个排序的链表
合并两个排序的链表 题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. *** 思路 如果pHead1和pHead2中有一个为空,则result是另 ...
- 剑指offer——面试题25:合并两个 排序的链表
自己答案: ListNode* MergeTwoSortedList(ListNode* pHead1,ListNode* pHead2) { if(pHead1==nullptr&& ...
- 剑指Offer面试题:13.合并两个排序的链表
一 题目:合并两个排序的链表 题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的.例如输入下图中的链表1和链表2,则合并之后的升序链表如链表3所示. 二 代码实现 te ...
- 《剑指offer》第二十五题(合并两个排序的链表)
// 面试题25:合并两个排序的链表 // 题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按 // 照递增排序的.例如输入图3.11中的链表1和链表2,则合并之后的升序链表如链 ...
- 剑指Offer - 九度1519 - 合并两个排序的链表
剑指Offer - 九度1519 - 合并两个排序的链表2013-11-30 22:04 题目描述: 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则.(hi ...
- 剑指Offer:合并两个排序的链表【25】
剑指Offer:合并两个排序的链表[25] 题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 题目分析 每次都是比较箭头节点,把小节点连接到已经合 ...
随机推荐
- Codeforces 1214 F G H 补题记录
翻开以前打的 #583,水平不够场上只过了五题.最近来补一下题,来记录我sb的调试过程. 估计我这个水平现场也过不了,因为前面的题已经zz调了好久-- F:就是给你环上一些点,两两配对求距离最小值. ...
- linux 动态库文件stripped属性理解
[file命令not stripped] UNIX下*.o和*.so文件显示的stripped和not stripped是什么意思? 表示符号表是否被清除. 在centos 6.2下用file命令查看 ...
- zabbix监控部署
zabbix是一款开源的监控软件,下面来一起学习一下zabbix监控的部署吧 环境: 主机名 地址 系统 角色 tiandong 192.168.209.3 centos6.5 服务端 winter ...
- mock的那点事
前言: Mock在GitHub上有12.9K的star可以看出,它在技术团队中是挺受欢迎的.这项技术被应用在不同领域的项目中. 适用场景: 下面我结合我们技术团队,列举最适合引入我们Mock服务的场景 ...
- js计算textarea输入文字的长度
前言 日常开发过程中,有些时候我们想使用textarea,然后限制输入的长度,在textarea末尾显示剩余可输入的字节数. 如下图: 解决方法: 常用的有三种方法: 1.通过判断charCodeA ...
- 动态生成html文件
#include"stdio.h" main() { FILE *a; int x1,x2,N1=99,N2=60; char FileName[100]; for(x1=10;x ...
- HNOI2015菜肴制作
一开始,没想出来,先topsort判环,把impossible拿到手,然后划分联通块,对每个联通块跑一遍topsort,觉得可对了,然后被大样例教育明白了,知道自己的策略错在哪了. 接着在纸上疯狂手模 ...
- VMWare workstation12配置CentOS6.5虚拟机NAT网络以及虚拟机静态IP
1.右键网络连接—>打开网络和共享中心—>更改适配器设置—>找到网络适配器VMware Virtual Ethernet Adapter for VMnet8—>如下图所示修改 ...
- centos6一键安装WordPress
#!/bin/bash service iptables stop setenforce yum -y install httpd service httpd restart yum -y insta ...
- 一、基础篇--1.2Java集合-HashMap和ConcurrentHashMap的区别【转】
http://www.importnew.com/28263.html 今天发一篇”水文”,可能很多读者都会表示不理解,不过我想把它作为并发序列文章中不可缺少的一块来介绍.本来以为花不了多少时间的,不 ...