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

力扣第21题:Java与Python实现有序链表合并(基础难度)

题目要求将两个已排序的链表合并成一个新的升序链表并返回。新链表应包含两个输入链表中的所有节点,并保持升序排列。例如,给定链表l1[1,2,4]和l2[1,3,4],合并后的结果应为[1,1,2,3,4,4]。本文将详细介绍如何使用Java和Python实现这一功能,包括具体的代码实现和算法思路。

题目:

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。  

示例 1:

  输入:l1 = [1,2,4], l2 = [1,3,4]

  输出:[1,1,2,3,4,4]

示例 2:

  输入:l1 = [], l2 = []

  输出:[]

示例 3:

  输入:l1 = [], l2 = [0]

  输出:[0]

提示:



  • 两个链表的节点数目范围是 [0, 50]

  • -100 <= Node.val <= 100

  • l1 和 l2 均按 非递减顺序 排列

解题思路:

递归:使用递归需要明白递归三要素,参考@腐烂的橘子

1.终止条件:当l1或l2任意一个链表为空时

2.递归内容:如果l1.val

3.返回值:每一层递归调用之后排序好后的头结点

举例:

1.

 2.

 3.

 4.

 5.

 6.

 7.

 

 8.

 

java代码:

1 /**
2 * Definition for singly-linked list.
3 * public class ListNode {
4 * int val;
5 * ListNode next;
6 * ListNode() {}
7 * ListNode(int val) { this.val = val; }
8 * ListNode(int val, ListNode next) { this.val = val; this.next = next; }
9 * }
10 */
11 class Solution {
12 public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
13 if(list1 == null){
14 return list2;
15 }else if(list2 == null){
16 return list1;
17 }else if(list1.val < list2.val){
18 list1.next = mergeTwoLists(list1.next, list2);
19 return list1;
20 }else{
21 list2.next = mergeTwoLists(list1, list2.next);
22 return list2;
23 }
24
25 }
26 }

 python3代码:

1 # Definition for singly-linked list.
2 # class ListNode:
3 # def __init__(self, val=0, next=None):
4 # self.val = val
5 # self.next = next
6 class Solution:
7 def mergeTwoLists(self, list1: Optional[ListNode], list2: Optional[ListNode]) -> Optional[ListNode]:
8 if not list1:
9 return list2
10 if not list2:
11 return list1
12
13 if list1.val < list2.val:
14 list1.next = self.mergeTwoLists(list1.next, list2)
15 return list1
16 else:
17 list2.next = self.mergeTwoLists(list1, list2.next)
18 return list2
19
20



推荐阅读
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • Android 渐变圆环加载控件实现
    本文介绍了如何在 Android 中创建一个自定义的渐变圆环加载控件,该控件已在多个知名应用中使用。我们将详细探讨其工作原理和实现方法。 ... [详细]
  • 将Web服务部署到Tomcat
    本文介绍了如何在JDeveloper 12c中创建一个Java项目,并将其打包为Web服务,然后部署到Tomcat服务器。内容涵盖从项目创建、编写Web服务代码、配置相关XML文件到最终的本地部署和验证。 ... [详细]
  • 本文详细探讨了Netty中Future及其子类的设计与实现,包括其在并发编程中的作用和具体应用场景。我们将介绍Future的继承体系、关键方法的实现细节,并讨论如何通过监听器和回调机制来处理异步任务的结果。 ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • 在哈佛大学商学院举行的Cyberposium大会上,专家们深入探讨了开源软件的崛起及其对企业市场的影响。会议指出,开源软件不仅为企业提供了新的增长机会,还促进了软件质量的提升和创新。 ... [详细]
  • 深入理解C++中的KMP算法:高效字符串匹配的利器
    本文详细介绍C++中实现KMP算法的方法,探讨其在字符串匹配问题上的优势。通过对比暴力匹配(BF)算法,展示KMP算法如何利用前缀表优化匹配过程,显著提升效率。 ... [详细]
  • 在Windows系统上安装VMware Workstation 2022的详细步骤
    本文将详细介绍如何在Windows系统上安装VMware Workstation 2022。包括从官方网站下载软件、选择合适的版本以及安装过程中的关键步骤。此外,还将提供一些激活密钥供参考。 ... [详细]
  • 本文详细解析了如何使用Python语言在STM32硬件平台上实现高效的编程和快速的应用开发。通过具体的代码示例,展示了Python简洁而强大的特性。 ... [详细]
  • 如何在WPS Office for Mac中调整Word文档的文字排列方向
    本文将详细介绍如何使用最新版WPS Office for Mac调整Word文档中的文字排列方向。通过这些步骤,用户可以轻松更改文本的水平或垂直排列方式,以满足不同的排版需求。 ... [详细]
  • 本文介绍如何通过Windows批处理脚本定期检查并重启Java应用程序,确保其持续稳定运行。脚本每30分钟检查一次,并在需要时重启Java程序。同时,它会将任务结果发送到Redis。 ... [详细]
  • JavaScript中属性节点的类型及应用
    本文深入探讨了JavaScript中属性节点的不同类型及其在实际开发中的应用,帮助开发者更好地理解和处理HTML元素的属性。通过具体的案例和代码示例,我们将详细解析如何操作这些属性节点。 ... [详细]
  • 探索弱监督开放域问答中的潜在检索机制
    本文探讨了在弱监督环境下,开放域问答系统中潜在检索技术的应用。通过引入反隐式任务预训练方法,研究展示了如何仅依赖问题答案对进行端到端的联合学习,而无需传统的信息检索系统。实验结果表明,在某些数据集上,这种新方法显著优于传统方法。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
author-avatar
幸福的xinwangnanfei_736
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有