题目描述

输入两个单调递增的链表,输出两个链表合成后的链表,
当然我们需要合成后的链表满足单调不减规则。

解题思路

这道题既可以采用递归的方式,也可以采用循环的方式。
2者的思路都是殊途同归的。

合并后的链表头结点指向值域较小的头结点,然后较小的链表往后移动继续和另外一个链表的头结点值域进行比较。
直到将其中一个链表链接完毕,再链接另外一个链表。

解题代码

#include <iostream>
#include "ListNode.h"
using namespace std;
/*题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,
当然我们需要合成后的链表满足单调不减规则。*/class SolutionMerge {
public://递归方式ListNode* Merge(ListNode* pHead1, ListNode* pHead2){if (pHead1 == nullptr)return pHead2;if (pHead2 == nullptr)return pHead1;ListNode* mergeHead = nullptr;if (pHead1->val < pHead2->val){mergeHead = pHead1;mergeHead->next = Merge(pHead1->next, pHead2);}else{mergeHead = pHead2;mergeHead->next = Merge(pHead1, pHead2->next);}return mergeHead;}//循环方式ListNode* Merge2(ListNode* pHead1, ListNode* pHead2){       if (pHead1 == nullptr)return pHead2;if (pHead2 == nullptr)return pHead1;ListNode* mergeHead = nullptr;if (pHead1->val < pHead2->val){mergeHead = pHead1;pHead1 = pHead1->next;}else{mergeHead = pHead2;pHead2 = pHead2->next;}ListNode* pCur = mergeHead;//递归改为循环while (pHead1 != nullptr && pHead2 != nullptr){if (pHead1->val < pHead2->val){pCur->next = pHead1;pHead1 = pHead1->next;}else{pCur->next = pHead2;pHead2 = pHead2->next;}pCur = pCur->next;}if (pHead1 == nullptr)pCur->next = pHead2;if (pHead2 == nullptr)pCur->next = pHead1;return mergeHead;}void PrintList(ListNode* pHead){if (pHead == nullptr)return;ListNode* pNode = pHead;while (pNode != nullptr){cout << pNode->val << endl;pNode = pNode->next;}}
};int main(int argc, char *argv[])
{//测试SolutionMerge solution;ListNode node1(1);ListNode node2(3); node1.next = &node2;ListNode node3(5); node2.next = &node3;ListNode node4(7); node3.next = &node4;ListNode Node1(2);ListNode Node2(4); Node1.next = &Node2;ListNode Node3(6); Node2.next = &Node3;ListNode Node4(8); Node3.next = &Node4;ListNode* p1 = solution.Merge(&node1, &Node1);solution.PrintList(p1);return 0;
}

运行测试

C/C++面试题—合并两个排序的链表【递归和循环两种方式】相关推荐

  1. python 合并两个排序的链表(递归解法)

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

  2. 合并两个排序的链表递归和非递归C++实现

    题目描述: 输入两个单调递增的链表,输出两个链表合成后的链表,要求合成后的链表满足单调不减规则. 1.分析 已知输入的两个链表递增有序,要使输出的链表依然递增有序,可以依次从输入的两个链表中挑选最小的 ...

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

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

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

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

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

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

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

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

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

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

  8. 剑指offer:合并两个排序的链表 python实现 合并K个排序的链表

    题目 题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 对应LeetCode21. 解题思路 暴力求解: 新建一个链表: 依次判断两个链表的大小, ...

  9. 【剑指Offer专题】链表系列:从尾到头打印链表、反转链表、回文链表、合并两个排序的链表(C++和Python实现)...

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 剑指Offer(三):从尾到头打印链表 输入一个链表的头节点,从尾到头反过来返回每 ...

  10. 《LeetCode力扣练习》剑指 Offer 25. 合并两个排序的链表 Java

    <LeetCode力扣练习>剑指 Offer 25. 合并两个排序的链表 Java 一.资源 题目: 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的. 示例1: ...

最新文章

  1. centeros /redhate密码破解
  2. Quartz总结(一):Quartz集成Spring的2个方法
  3. u8系统更改了服务器,u8修改服务器配置文件
  4. C++Exponential search指数搜索的实现算法(附完整源码)
  5. python argparse type_python argparse(参数解析模块)
  6. 全国小学四则运算1.0
  7. bootstrap 空行不显示横杠_bootstrap兼容问题
  8. PyOpenGL之3D界面详解(一)
  9. datatable中使用linq的条件或_C# 10. LINQ 的三种查询语句写法
  10. typora markdown 标题自动编号
  11. 聚类分析软件测试,基于复杂网络的软件测试路径聚类分析-计算机工程与应用.PDF...
  12. Java项目:ssm党员管理系统
  13. 监控系统 Prometheus 的说明
  14. IP包流量分析(一)(python+pypcap+dkpt)
  15. python分割压缩_python实现文件压缩与解压
  16. 电子商务系统的设计与实现(十一):数据库设计
  17. 达芬奇调色软件DaVinci Resolve15破解版
  18. 莫烦python---pytorch学习(上)
  19. CSS阴影属性-文字阴影 盒子阴影
  20. 【坑】python、R里面条件判断是不一样的

热门文章

  1. 使用 Finder预览功能,让你可以快速浏览多个文件
  2. indexof java_java indexOf()简单字符查找实例
  3. java win10 通知_如何在Java中创建Windows通知
  4. 第3课 攀天梯(ladder)--记忆化搜索(python3实现)
  5. 第55课 分解质因数 《小学生C++编程入门》
  6. CAN总线技术 | 物理层02 - CAN总线的异步串行通讯
  7. Arduino笔记-使用独立电源给Arduino供电并闪灯
  8. C++学习笔记-DLL中动态内存管理
  9. Qt工作笔记-对Qt工作线程的进一步理解
  10. Wireshark工作笔记-TCP的状态解析,以及建立连接与关闭连接