热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

剑指Offer017合并两个排序的链表

链接牛客OJ:合并两个排序的链表九度OJ:http:ac.jobdu.comproblem.php?pid1519GitHub代码:017

链接


牛客OJ:合并两个排序的链表

九度OJ:http://ac.jobdu.com/problem.php?pid=1519

GitHub代码: 017-合并两个排序的链表

CSDN题解:剑指Offer–017-合并两个排序的链表


牛客OJ九度OJCSDN题解GitHub代码
合并两个排序的链表1519-合并两个排序的链表剑指Offer–017-合并两个排序的链表017-合并两个排序的链表


您也可以选择回到目录-剑指Offer–题集目录索引

其实这道题跟LeetCode上一道题是一样的

LeetCodet题解–21. Merge Two Sorted Lists(合并两个排序好的链表)

当然他还有很多变种,比如说两个链表扩展成为K个的时候

LeetCodet题解–23. Merge k Sorted Lists(合并K个已排序的链表)


题意

题目描述

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

样例输入

1 3 5 7 9
2 4

样例输出

1 2 3 4 5 7 9


常规写法

思路很简单,用两个指针同步遍历两个链表,每次找到小的那个插入到新的链表中

#include using namespace std;// 调试开关
#define __tmain main#ifdef __tmain#define debug cout#else#define debug 0 && cout#endif // __tmain#ifdef __tmain
struct ListNode
{
public :int val;struct ListNode *next;
// ListNode(int x)
// :val(x), next(NULL)
// {
// }
};#endif // __tmainclass Solution
{
public:ListNode* Merge(ListNode *pLeft, ListNode *pRight){if(pLeft &#61;&#61; NULL){debug <<"left list is NULL" <return pRight;}else if(pRight &#61;&#61; NULL){debug <<"right list is NULL" <return pLeft;}ListNode *left &#61; pLeft;ListNode *right &#61; pRight;// 先生成头结点ListNode *head &#61; NULL;if(left->val val){head &#61; left;left &#61; left->next;debug "in list" <else{head &#61; right;right &#61; right->next;debug "in list" <// 遍历两个链表ListNode *curr &#61; head;while(left !&#61; NULL && right !&#61; NULL){// 每次找到一个小的加入新的链表debug <<"left &#61; " <val <<", right &#61; " <val <if(left->val val){debug <val <<"in list" <next &#61; left;curr &#61; curr->next;left &#61; left->next;}else{debug <val <<"in list" <next &#61; right;curr &#61; curr->next;right &#61; right->next;}}// 处理较长链表的剩余部分if(left !&#61; NULL){curr->next &#61; left;}else{curr->next &#61; right;}return head;}
};int __tmain( )
{ListNode left, right[3];left.val &#61; 5;left.next &#61; NULL;right[0].val &#61; 1;right[0].next &#61; &right[1];right[1].val &#61; 2;right[1].next &#61; &right[2];right[2].val &#61; 4;right[2].next &#61; NULL;Solution solu;ListNode *head &#61; solu.Merge(&left, right);while(head !&#61; NULL){cout next;}return 0;
}

递归实现

其实思路一样&#xff0c;只是由于每次添加节点&#xff0c;都是机械性地重复工作&#xff0c;因此可以用递归来实现


class Solution
{
public:ListNode* Merge(ListNode *pLeft, ListNode *pRight){if(pLeft &#61;&#61; NULL){debug <<"left list is NULL" <return pRight;}else if(pRight &#61;&#61; NULL){debug <<"right list is NULL" <return pLeft;}ListNode *head &#61; NULL;if(pLeft->val val){head &#61; pLeft;head->next &#61; Merge(pLeft->next, pRight);}else{head &#61; pRight;head->next &#61; Merge(pLeft, pRight->next);}return head;}
};


推荐阅读
  • 本题探讨如何通过最大流算法解决农场排水系统的设计问题。题目要求计算从水源点到汇合点的最大水流速率,使用经典的EK(Edmonds-Karp)和Dinic算法进行求解。 ... [详细]
  • 深入解析Spring启动过程
    本文详细介绍了Spring框架的启动流程,帮助开发者理解其内部机制。通过具体示例和代码片段,解释了Bean定义、工厂类、读取器以及条件评估等关键概念,使读者能够更全面地掌握Spring的初始化过程。 ... [详细]
  • 扫描线三巨头 hdu1928hdu 1255  hdu 1542 [POJ 1151]
    学习链接:http:blog.csdn.netlwt36articledetails48908031学习扫描线主要学习的是一种扫描的思想,后期可以求解很 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 本文介绍了在Windows环境下使用pydoc工具的方法,并详细解释了如何通过命令行和浏览器查看Python内置函数的文档。此外,还提供了关于raw_input和open函数的具体用法和功能说明。 ... [详细]
  • andr ... [详细]
  • 本文详细探讨了VxWorks操作系统中双向链表和环形缓冲区的实现原理及使用方法,通过具体示例代码加深理解。 ... [详细]
  • 本文详细介绍了如何在Ubuntu系统中下载适用于Intel处理器的64位版本,涵盖了不同Linux发行版对64位架构的不同命名方式,并提供了具体的下载链接和步骤。 ... [详细]
  • 本文详细探讨了JDBC(Java数据库连接)的内部机制,重点分析其作为服务提供者接口(SPI)框架的应用。通过类图和代码示例,展示了JDBC如何注册驱动程序、建立数据库连接以及执行SQL查询的过程。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
  • 深入了解 Windows 窗体中的 SplitContainer 控件
    SplitContainer 控件是 Windows 窗体中的一种复合控件,由两个可调整大小的面板和一个可移动的拆分条组成。本文将详细介绍其功能、属性以及如何通过编程方式创建复杂的用户界面。 ... [详细]
  • This pull request introduces the ability to provide comprehensive paragraph configurations directly within the Create Note and Create Paragraph REST endpoints, reducing the need for additional configuration calls. ... [详细]
  • 本文详细介绍了C++中map容器的多种删除和交换操作,包括clear、erase、swap、extract和merge方法,并提供了完整的代码示例。 ... [详细]
  • 由二叉树到贪心算法
    二叉树很重要树是数据结构中的重中之重,尤其以各类二叉树为学习的难点。单就面试而言,在 ... [详细]
author-avatar
不会做饭的我
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有