leetCode第21题 合并两个有序链表

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

示例 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 均按 非递减顺序 排列

对于python3的链表,题目中有一段提示

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next

我们知道了链表包含了两个元素,一个是int型的 val(默认值是0),另一个是next,用来指向下一个结点,所以应该是ListNode型

思路的话可以采用双指针加循环的方式
l1 和 l2 是两个链表,但本质是链表的头指针,所以直接当作指针就行,不需要定义新的指针
比较l1和l2的值,如果l1比l2小,那么将p.next指向l1,然后l1后移(l1 = l1.next);否则p.next指向l2,l2后移
只要有一个表先被遍历完,即 l = None,则退出循环,将没被遍历完的表直接在p的尾巴后面接上
考虑特殊情况,如果l1(l2)一开始就是空表,那么直接返回l2(l1)。
循环中只把两个表遍历了一遍,时间复杂度为O(m+n)

## python3
class Solution:def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:if l1 == None:   # l1为空直接返回l2return l2if l2 == None:   # l2为空直接返回l1return l1result = ListNode()   # 存放结果p = result      # 指针while l1 != None and l2 != None:if l1.val < l2.val:  # 比较两个结点的值,l1的值小p.next = l1    # 将p的下一个结点指向当前的l1l1 = l1.next    # l1后移else:     # 否则将p的下一个指向当前的l2,l2则后移p.next = l2l2 = l2.nextp = p.nextif l1 != None:  # 如果l1没有遍历完,则直接在p的后面接上剩余部分p.next = l1if l2 != None:p.next = l2return result.next

接上继续分析,可以利用递归进行操作
当p指向的是l1的头结点时,问题就变成了l1.next和l2两个有序链表进行合并,问题规模变小了,但问题还是链表的合并,这就意味着可以用递归,代码如下。

## python3
class Solution:def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:if l1 == None:   # l1为空直接返回l2return l2if l2 == None:   # l2为空直接返回l1return l1if l1.val < l2.val:l1.next = self.mergeTwoLists(l1.next,l2)return l1else:l2.next = self.mergeTwoLists(l1,l2.next)return l2

合并两个有序链表-python相关推荐

  1. fastreport 打印两个list_Smaller And Smarter Python数据结构:合并两个有序链表

    原创: 老表 简说Python 今日问题 :翻转链表k个相邻结点 """目标:写一段程序,合并两个有序链表例如:输入-> 1->2->3输入-> ...

  2. python合并两个有序列表_Python实现合并两个有序链表的方法示例

    本文实例讲述了Python实现合并两个有序链表的方法.分享给大家供大家参考,具体如下: 思路:先选出第一个节点,然后遍历两个链表,把小的作为当前节点的下一个节点,一直到其中一个链表遍历完,这时候把另一 ...

  3. python创建一个有序链表_Python实现合并两个有序链表的方法示例

    本文实例讲述了Python实现合并两个有序链表的方法.分享给大家供大家参考,具体如下: 思路:先选出第一个节点,然后遍历两个链表,把小的作为当前节点的下一个节点,一直到其中一个链表遍历完,这时候把另一 ...

  4. 【每日一算法】 合并两个有序链表

    微信改版,加星标不迷路! 每日一算法-合并两个有序链表 作者:阿广 阅读目录 1 题目 2 解析 1 题目 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. ...

  5. 【Java】leetCode 21 合并两个有序链表

    题目 : 将两个升序链表合并为一个新的 升序 链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 解题思路 : 1.依据以上两个升序链表进行拼接: 2.先定义一个傀儡节点newHead,用来 ...

  6. 合并两个有序链表分析

    合并两个有序链表: 将两个升序链表合并为一个新的 升序 链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: l1 l2 输入:1->2->4, 1->3->4 ...

  7. 《LeetCode力扣练习》第21题 合并两个有序链表 Java

    <LeetCode力扣练习>第21题 合并两个有序链表 Java 一.资源 题目: 将两个升序链表合并为一个新的 升序 链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例 ...

  8. 算法:合并两个有序链表

    题目 合并两个有序链表 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出:1- ...

  9. LeetCode题组:第21题-合并两个有序链表

    1.题目:合并两个有序链表 将两个升序链表合并为一个新的升序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出: ...

  10. LeetCode 21合并两个有序链表22括号生成

    微信搜索bigsai,回复进群,加入打卡.维护不易,欢迎点赞支持! 合并两个有序列表 将两个升序链表合并为一个新的 升序 链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1 ...

最新文章

  1. linux基础文件管理基础命令
  2. tts代表_Text-to-Speech (TTS) Synthesis语音合成----控制语言合成
  3. 新来的前端小姐姐问:Vue路由history模式刷新页面出现404问题
  4. 纽交所再次反转重新推动“摘牌” 三大运营商回应来了
  5. 阿里通报前淘宝直播运营负责人违规:接受礼品及款待,安排女友入职合作方...
  6. Mac 10.12安装IntelliJ出品的数据库管理工具DataGrip
  7. 华三 h3c ospf、rip 路由引入和路由策略
  8. 5.go 代码包 package
  9. 的唯一性_原神:被氪金玩家淹没的角色,输出很高,技能具有唯一性
  10. 多个Gbase集群间表同步思路
  11. html中class类怎么写,HTML class 属性 | 菜鸟教程
  12. 景区大数据可视化交互系统-全方位旅游服务平台,打造景区信息数据管理分析平台
  13. navigator对象的主要属性介绍
  14. 14年间,用友U9 cloud如何让众多“专精特新”成长为行业冠军
  15. uniapp picker选择器注意点
  16. Word中在囗中打勾或打叉的方法介绍
  17. 把图片转换成视频-ffmpeg
  18. form表单用butten提交后无反应表单提交三种方式
  19. 无盘服务器0x00000124,蓝屏0x00000124,懂的帮我一下
  20. java根据ip地址获取城市地域信息

热门文章

  1. JQ实现图片预览(轮播,放大缩小,拖拽,ajax请求,旋转)
  2. 安卓手机修改ntp服务器,修改安卓手机ntp服务器地址
  3. python xlwt_Python模块xlwt对excel进行写入操作
  4. python xlwt模块下载_python 的xlwt模块
  5. 《机器学习》周志华第一章课后习题
  6. 各种浏览器怎么换ip
  7. 逆向Mac版WPS(解除版本过期限制)
  8. 我看过的机器学习方面的好文章
  9. 手机屏幕为什么比电脑屏幕清晰?
  10. Python-GeoPandas地图、专题地图绘制