对于链表,《剑指offer》中感觉有些地方不妥,前面讲过链表的头指针是指向一个指针的指针,即指向头结点的指针的指针。但是后面在链表的使用中输入的头指针只是指向链表的头结点的指针。

后面看《c和指针》时看到单链表这一块,链表的表示时用一个根指针来表示链表的起始位置,根指针指向链表的第一个节点,根指针只是一个指针,不包含任何数据。当我们需要改动链表,如果可能改动根指针,如将根指针改为指向另一个节点,则传参时需要以指针形式传递才可以改动根指针的值,即参数就变为了指向根指针的指针,也是指向第一个节点的指针的指针。而当我们不会改动链表根指针时输入参数不需要输入指针,直接输入根指针就可以了。

题目:合并两个排序的数组

递归的方法:(附上《剑指offer》中的解法)

struct ListNode
{int m_nValue;ListNode *m_pNext;};ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
{if(pHead1 == NULL)return pHead2;else if(pHead2 == NULL)return pHead1;ListNode* pMergedHead = NULL;if(pHead1->m_nValue < pHead2->m_nValue){pMergedHead = pHead1;pMergedHead->m_pNext = Merge(pHead1->m_pNext, pHead2);}else{pMergedHead = pHead2;pMergedHead->m_pNext = Merge(pHead1, pHead2->m_pNext);}return pMergedHead;
}

循环的方法:(在这里我写了一个循环的方法,这里还是输入参数为指向头结点的指针,因为原列表的头指针可以不变,但此时实际上链表1和链表2已经不是原来的链表了;个人感觉应该将两个根指针置为NULL比较好)

ListNode* MergeSorted2Lists(ListNode* pHead1, ListNode* pHead2)
{if(pHead1 == NULL)return pHead2;else if(pHead2 == NULL)return pHead1;ListNode* pListNewSmall = pHead1;ListNode* pListNewLarge = pHead2;if(pListNewSmall->m_nValue > pListNewLarge->m_nValue){swap(pListNewLarge,pListNewSmall);}ListNode* pMergedHead = pListNewSmall;while(pListNewLarge){while( pListNewSmall->m_pNext && pListNewSmall->m_pNext->m_nValue <= pListNewLarge->m_nValue ){pListNewSmall = pListNewSmall->m_pNext;}ListNode* tempNode = pListNewSmall->m_pNext;pListNewSmall->m_pNext = pListNewLarge;pListNewSmall = pListNewLarge;pListNewLarge = tempNode;}return pMergedHead;
}


面试题整理 4 合并两个排序的数组相关推荐

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

    面试题17:合并两个排序的链表 题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的.例如输入图3.7中的链表1和链表2,则合并之后的升序链表如链表3所示.链表结点定义如 ...

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

    剑指offer--面试题17:合并两个排序的链表 Solution1: 不要犯低级错误... /* struct ListNode {int val;struct ListNode *next;Lis ...

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

    PS:这也是一道出镜率极高的面试题,我相信很多童鞋都会很眼熟,就像于千万人之中遇见不期而遇的人,没有别的话可说,唯有轻轻地问一声:"哦,原来你也在这里? " 一.题目:合并两个排序 ...

  4. P114、面试题17:合并两个排序的链表

    题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增顺序的. struct ListNode{       int    m_nKey;       ListNode*     ...

  5. 【剑指offer】面试题25:合并两个排序的链表(Java)

    输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的. 示例1: 输入:1->2->4, 1->3->4 输出:1->1->2->3-&g ...

  6. 【剑指offer】面试题25:合并两个排序的链表(Java 实现)

    题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的. 代码: package offer; class Node5 {     int val;     Node5 n ...

  7. 面试题25:合并两个排序的链表

    NowCoder <?php header("content-type:text/html;charset=utf-8"); /** 输入两个单调递增的链表,输出两个链表合成 ...

  8. 面试题25: 合并两个排序的链表

    /******************************************************************* *<剑指Offer--名企面试官精讲典型编程题>C ...

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

    题目:合并两个排序的链表 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的. 示例1: 输入:1->2->4, 1->3->4 输出:1->1-& ...

最新文章

  1. 计算机显示时区怎么更改,电脑如何设置显示多时区时间?
  2. php mysql 插入多条数据_雷林鹏分享:PHP MySQL 插入多条数据
  3. html左侧td字体居右,如何在td中控制字体右对齐 且加粗_html/css_WEB-ITnose
  4. js 浏览器复制功能
  5. 什么时候会是用treeset?_flex:1 到底代表什么?
  6. node.js https 模块设置请求头等信息
  7. Z-Stack Home Developer's Guide—3. The Home Automation Profile and the Sample Applications中文翻译
  8. Codeforces Round #248 (Div. 2) B. Kuriyama Mirai's Stones
  9. jQuery淡入淡出
  10. Java Web 后端技术
  11. 为知笔记保存为html,为知笔记怎么保存网页 为知笔记保存网页教程
  12. 【干货分享】硬件测试工程师必备基本技能,看这一篇就够!
  13. i标签和em标签的区别
  14. 一文告诉你大数据是什么
  15. Redis从精通到入门——数据类型Zset实现源码详解
  16. 国家集训队论文分类整理(转)
  17. linux c 数字字符串互转 相关函数 atoi、atof、atol、atrtod、strtol、strtoul
  18. 基于Go语言GoFrame+Layui的OA办公系统
  19. PDF转成Word或PPT后还是图片是怎么回事?
  20. SNKr:创造新的潮圈文化 将区块链与时尚潮流结合

热门文章

  1. 【android-tips】如何在android应用中插入百度广告(附源码)
  2. 史上最全的MySQL高性能优化实战总结!
  3. XMemcached使用示例--转
  4. 简单的MapReduce项目,计算文件中单词出现的次数
  5. NUXT: 视图和模板
  6. 最新|TensorFlow开源的序列到序列框架
  7. 使用 AngularJS 和 Electron 构建桌面应用
  8. 百度母婴技术团队—基于Reactjs实现webapp #1
  9. Spring - @CompentScan全解
  10. Java - String源码解析及常见面试问题