原创博客,转载请注明出处!

1.题目

输入两个单调递增的链表,输出两个链表合成后的链表(单调不减)。

2.思路(递归)

# 鲁棒性:

如果链表1是空链表,则直接输出链表2。

如果链表2是空链表,则直接输出链表1。

# 递归思路:

定义三个指针,指向链表1头结点的指针p1,指向链表2头结点的指针p2,指向合并后链表头节点的指针head。比较p1和p2的值,如果p1<p2,那么head指向p1,p1指向p1的下一个节点;如果p1>p2,那么head指向p2,p2指向p2的下一个节点。依次类推……

3.代码

本题《牛客网》地址 

 /*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
{
// 鲁棒性(边界检查)
if(pHead1==nullptr)
return pHead2; if(pHead2==nullptr)
return pHead1; // 递归合并
ListNode* head = nullptr;
if(pHead1->val < pHead2->val)
{
head = pHead1;
head->next = Merge(pHead1->next,pHead2);
}
else
{
head = pHead2;
head->next = Merge(pHead1,pHead2->next);
} return head; }
};

4.测试用例

# 边界测试

  • 链表1是空指针
  • 链表2是空指针
  • 链表1和链表2是空指针

# 功能测试

  • 两个链表有多个节点,节点的值互不相同
  • 两个链表有多个节点,存在值相等的多个节点

【剑指offer-25】合并两个单调递增的链表,C++实现(链表)的更多相关文章

  1. 剑指 Offer 25. 合并两个排序的链表

    剑指 Offer 25. 合并两个排序的链表 Offer 25 该问题的原型就是多项式的合并. 实现较简单,没有特殊需要注意的问题. package com.walegarrett.offer; /* ...

  2. 【Java】 剑指offer(25) 合并两个排序的链表

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照 ...

  3. 剑指offer——25合并两个排序的链表

    题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则.   题解: 使用普通方法,或者递归,注意新的头节点即可. //使用普通的合并方法 class S ...

  4. [剑指offer]25.合并两个排序的链表(迭代+递归)

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

  5. 【力扣】剑指 Offer 25. 合并两个排序的链表

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

  6. 剑指Offer:合并两个排序的链表【25】

    剑指Offer:合并两个排序的链表[25] 题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 题目分析 每次都是比较箭头节点,把小节点连接到已经合 ...

  7. 《剑指offer》 合并两个排序的链表

    本题来自<剑指offer> 合并两个排序的链表 题目: 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 思路: A:采用递归的方式(C++ C ...

  8. 【剑指Offer】合并两个排序的链表 解题报告(Python)

    [剑指Offer]合并两个排序的链表 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-interview ...

  9. Go语言实现:【剑指offer】合并两个排序的链表

    该题目来源于牛客网<剑指offer>专题. 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. Go语言实现: //递归 func merge(l ...

随机推荐

  1. mybatis映射文件select_resultMap_关联查询_collection定义关联集合

    知识点:查询一个实体类,并查出这个类下面的集合 Employee.java实体类 package com.hand.mybatis.bean;public class Employee {    pr ...

  2. 分词工具比较及使用(ansj、hanlp、jieba)

    一.分词工具 ansj.hanlp.jieba 二.优缺点 1.ansj 优点: 提供多种分词方式 可直接根据内部词库分出人名.机构等信息 可构造多个词库,在分词时可动态选择所要使用的词库缺点: 自定 ...

  3. String被设计成不可变和不能被继承的原因

    String是所有语言中最常用的一个类.我们知道在Java中,String是不可变的.final的.Java在运行时也保存了一个字符串池(String pool),这使得String成为了一个特别的类 ...

  4. cps/trampoline

    eopl 第五.六两章谈的就是这个问题. 我写了一个 python 版本的程序,先挖个坑,然后等彻底看完再补上. #!/usr/bin/env python # -*- coding: utf-8 - ...

  5. 解决ubuntu在当前位置打开终端功能

    ubuntu右键在当前位置打开终端   ubuntu增加右键命令:   在终端中打开   软件中心:   搜索nautilus-open-terminal安装   命令行:   sudo apt-ge ...

  6. javaScript实现点击按钮直接打印

    很多网站都有此功能,当浏览到底部时都会有一个打印按钮,点击打印按钮就可以完成打印功能,功能非常不错,人性化,代码非常的简单. 一.只要调用window.print()函数就可以实现打印当前页面 < ...

  7. Amazon, Clear, Debian, Gentoo, Red Hat, SUSE & Ubuntu Performance On The EC2 Cloud

    https://www.phoronix.com/scan.php?page=article&item=ec2-holiday-2017&num=5

  8. js删除数组中某一项或几项的几种方法

    1:js中的splice方法 splice(index,len,[item])    注释:该方法会改变原始数组. splice有3个参数,它也可以用来替换/删除/添加数组内某一个或者几个值 inde ...

  9. [Spring]Spring Mvc实现国际化/多语言

    1.添加多语言文件*.properties F64_en_EN.properties详情如下: F60_G00_M100=Please select data. F60_G00_M101=Are yo ...

  10. 修改linux系统用户最大线程数限制

    linux系统对线程数量有个最大限制,当达到系统限制的最大线程数时使用账号密码ssh到系统时是无法登陆的,会报Write failed: Broken pipe,或者是shell request fa ...