题目:合并两个排序的单向链表

自己所写代码如下:

ListNode* MergeSortedLists(ListNode* pHead1, ListNode* pHead2)
{
if(pHead1 == NULL || pHead2 == NULL)
return NULL;
return (pHead1->value < pHead2->value)? MergeTwoList(pHead1,pHead2):MergeTwoList(pHead2,pHead1);
} ListNode* MergeTwoList(ListNode* pFirst,ListNode* pSecond)
{
ListNode* pHead = pFirst;
ListNode* ptemp = pSecond; while(pHead->pNext != NULL || ptemp->pNext != NULL)
{
while(pHead->pNext != NULL && pHead->pNext->value <= ptemp->value)
pHead = pHead->pNext; ListNode* pHead1 = pHead->pNext;
ListNode* ptemp1 = ptemp->pNext;
ptemp->pNext = pHead->pNext;
pHead->pNext = ptemp;
ptemp = ptemp1;
pHead = pHead1;
} if(pHead->pNext == NULL)
pHead->pNext = ptemp; return pFirst;
}

PS:未经测试!

作者分析的太精辟了!相比之下,自己的思路还不够完善,同时没有想到用递归实现。。。

//思路:两个链表中的头结点作比较,较小的被选为‘头结点’并链接到前一节点之后;
// 不断缩小规模,直到某个链表为空!
//所以递归!
ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
{
//递归终止条件
//经典!
if(pHead1 == NULL)
return pHead2;
else if(pHead2 == NULL)
return pHead1; ListNode* pMerged = NULL;
if(pHead1->value < pHead2->value)
{
pMerged = pHead1;
pMerged->pNext = Merge(pHead1->pNext,pHead2);
}
else
{
pMerged = pHead2;
pMerged->pNext = Merge(pHead1,pHead2->pNext);
} return pMerged; }

剑指offer--面试题17的更多相关文章

  1. 剑指Offer:面试题17——合并两个排序的链表

    题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 思路1: 分别用p1,p2两个指针扫描两个有序链表,p3指针去构建新链表h3. p1.val & ...

  2. 【剑指offer 面试题17】合并两个排序的链表

    思路: 比较两个链表端点值的大小,通过递归的方式排列. #include <iostream> using namespace std; struct ListNode { int val ...

  3. 剑指offer面试题17:合并两个排序的链表

    题目:输入两个递增排序的链表,合并这两个链表并使新链表中的节点人是按照递增排序的.解题思路:两个链表分别都已经是有序的了,遍历链表的时候只要比较两个链表当前位置大小,取出最小的添加到新链表中. 可以有 ...

  4. 剑指offer——面试题17:打印从1到最大的n位数

    用字符串模拟加法: #include"iostream" #include"string.h" using namespace std; bool AddOne ...

  5. C++版 - 剑指Offer 面试题45:圆圈中最后剩下的数字(约瑟夫环问题,ZOJ 1088:System Overload类似)题解

    剑指Offer 面试题45:圆圈中最后剩下的数字(约瑟夫环问题) 原书题目:0, 1, - , n-1 这n个数字排成一个圈圈,从数字0开始每次从圆圏里删除第m个数字.求出这个圈圈里剩下的最后一个数字 ...

  6. 剑指Offer:面试题15——链表中倒数第k个结点(java实现)

    问题描述 输入一个链表,输出该链表中倒数第k个结点.(尾结点是倒数第一个) 结点定义如下: public class ListNode { int val; ListNode next = null; ...

  7. 剑指offer面试题3 二维数组中的查找(c)

    剑指offer面试题三:

  8. 剑指Offer——笔试题+知识点总结

    剑指Offer--笔试题+知识点总结 情景回顾 时间:2016.9.23 12:00-14:00 19:00-21:00 地点:山东省网络环境智能计算技术重点实验室 事件:笔试 注意事项:要有大局观, ...

  9. C++版 - 剑指offer之面试题37:两个链表的第一个公共结点[LeetCode 160] 解题报告

    剑指offer之面试题37 两个链表的第一个公共结点 提交网址: http://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46?t ...

  10. C++版 - 剑指offer 面试题23:从上往下打印二叉树(二叉树的层次遍历BFS) 题解

    剑指offer  面试题23:从上往下打印二叉树 参与人数:4853  时间限制:1秒  空间限制:32768K 提交网址: http://www.nowcoder.com/practice/7fe2 ...

随机推荐

  1. Centos与win8.1的双系统

      背景:win8.1系统已经安装完成,并在此基础之上使用光盘或者U盘来安装centos系统,最终实现双系统   1.         在win8.1系统下查看磁盘及分区情况   2.         ...

  2. 【原创】Tomcat集群环境下对session进行外部缓存的方法(2)

    Session对象的持久化比较麻烦,虽然有序列化,但是并不确定Session对象中保存的其他信息是否可以序列化,这可能是网上很多解决方案摒弃此种做法的原因,网上的很多做法都是将Session中的att ...

  3. 如何让R代码按计划执行

    应用场景:你编写了R代码,每天对提交的数据进行分析,你希望它你吃饭的时候执行完毕,生成图表. 那么你需要安装taskscheduleR的包. 怎么操作,看帮助呗.

  4. VC中调用COM组件的方法(转载)

    原文参考:http://hi.baidu.com/mingyueye/item/53ebecd44da76917d80e4449 总结一下在VC中调用COM组件的方法 准备及条件: COM服务器为进程 ...

  5. 对象-关系Metadata映射模式

    MetaData Mapping元数据映射 在MetaData中保存object-relation映射的详细信息. 以表格形式定义映射,并可由通用代码来处理映射. 运行机制 MetaData中的信息如 ...

  6. C语言获取系统时间的几种方式[转]

    C语言获取系统时间的几种方式 C语言中如何获取时间?精度如何? 1 使用time_t time( time_t * timer ) 精确到秒 2 使用clock_t clock() 得到的是CPU时间 ...

  7. 推荐7款新鲜出炉的HTML5/CSS3应用

    1.HTML5/CSS3发光文字可自定义文字色彩效果很赞 要分享的这款HTML5/CSS3文字效果很帅,鼠标滑过文字时,文字会出现发光的特效,并且我们可以自定义文字和颜色. 在线演示 源码下载 2.H ...

  8. 杭电ACM2098--分拆素数和

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=2098 这是源码.其实我本不想拿出源码,毕竟源码很容易被复制. 我这里刚开始出错的地方有 0_0_12811 ...

  9. DailyWallpaper - V1.01 released

    桌面每日一图 最近发现美国国家地理网站上有个photo of the day很不错,地址在这里.http://photography.nationalgeographic.com/photograph ...

  10. 简明Python中的一个小错误

    最近在学Python,先看的是<Python基础教程>,后来经别人推荐,感觉网络上的<简明Python教程>也挺好的,在里面发现一个小错误. 网址如下:http://sebug ...