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


推荐阅读
  • Codeforces Round #566 (Div. 2) A~F个人题解
    Dashboard-CodeforcesRound#566(Div.2)-CodeforcesA.FillingShapes题意:给你一个的表格,你 ... [详细]
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • C++实现经典排序算法
    本文详细介绍了七种经典的排序算法及其性能分析。每种算法的平均、最坏和最好情况的时间复杂度、辅助空间需求以及稳定性都被列出,帮助读者全面了解这些排序方法的特点。 ... [详细]
  • 本文基于刘洪波老师的《英文词根词缀精讲》,深入探讨了多个重要词根词缀的起源及其相关词汇,帮助读者更好地理解和记忆英语单词。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
  • 本题旨在通过给定的评级信息,利用拓扑排序和并查集算法来确定全球 Tetris 高手排行榜。题目要求判断是否可以根据提供的信息生成一个明确的排名表,或者是否存在冲突或信息不足的情况。 ... [详细]
  • 开发笔记:9.八大排序
    开发笔记:9.八大排序 ... [详细]
  • 深入解析Spring启动过程
    本文详细介绍了Spring框架的启动流程,帮助开发者理解其内部机制。通过具体示例和代码片段,解释了Bean定义、工厂类、读取器以及条件评估等关键概念,使读者能够更全面地掌握Spring的初始化过程。 ... [详细]
  • 由二叉树到贪心算法
    二叉树很重要树是数据结构中的重中之重,尤其以各类二叉树为学习的难点。单就面试而言,在 ... [详细]
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社区 版权所有