热门标签 | 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;}
};


推荐阅读
  • 深入解析Spring启动过程
    本文详细介绍了Spring框架的启动流程,帮助开发者理解其内部机制。通过具体示例和代码片段,解释了Bean定义、工厂类、读取器以及条件评估等关键概念,使读者能够更全面地掌握Spring的初始化过程。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • C++实现经典排序算法
    本文详细介绍了七种经典的排序算法及其性能分析。每种算法的平均、最坏和最好情况的时间复杂度、辅助空间需求以及稳定性都被列出,帮助读者全面了解这些排序方法的特点。 ... [详细]
  • 本题旨在通过给定的评级信息,利用拓扑排序和并查集算法来确定全球 Tetris 高手排行榜。题目要求判断是否可以根据提供的信息生成一个明确的排名表,或者是否存在冲突或信息不足的情况。 ... [详细]
  • 本文详细介绍了C++中map容器的多种删除和交换操作,包括clear、erase、swap、extract和merge方法,并提供了完整的代码示例。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 将Web服务部署到Tomcat
    本文介绍了如何在JDeveloper 12c中创建一个Java项目,并将其打包为Web服务,然后部署到Tomcat服务器。内容涵盖从项目创建、编写Web服务代码、配置相关XML文件到最终的本地部署和验证。 ... [详细]
  • 开发笔记:9.八大排序
    开发笔记:9.八大排序 ... [详细]
  • 由二叉树到贪心算法
    二叉树很重要树是数据结构中的重中之重,尤其以各类二叉树为学习的难点。单就面试而言,在 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 深入解析Spring Cloud Ribbon负载均衡机制
    本文详细介绍了Spring Cloud中的Ribbon组件如何实现服务调用的负载均衡。通过分析其工作原理、源码结构及配置方式,帮助读者理解Ribbon在分布式系统中的重要作用。 ... [详细]
  • 本文探讨了如何利用 Python 的 PyPDF2 库在内存中高效地合并多个 PDF 文件,并讨论了相关的内存管理问题及优化策略。 ... [详细]
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社区 版权所有