合并两个有序链表-python
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相关推荐
- fastreport 打印两个list_Smaller And Smarter Python数据结构:合并两个有序链表
原创: 老表 简说Python 今日问题 :翻转链表k个相邻结点 """目标:写一段程序,合并两个有序链表例如:输入-> 1->2->3输入-> ...
- python合并两个有序列表_Python实现合并两个有序链表的方法示例
本文实例讲述了Python实现合并两个有序链表的方法.分享给大家供大家参考,具体如下: 思路:先选出第一个节点,然后遍历两个链表,把小的作为当前节点的下一个节点,一直到其中一个链表遍历完,这时候把另一 ...
- python创建一个有序链表_Python实现合并两个有序链表的方法示例
本文实例讲述了Python实现合并两个有序链表的方法.分享给大家供大家参考,具体如下: 思路:先选出第一个节点,然后遍历两个链表,把小的作为当前节点的下一个节点,一直到其中一个链表遍历完,这时候把另一 ...
- 【每日一算法】 合并两个有序链表
微信改版,加星标不迷路! 每日一算法-合并两个有序链表 作者:阿广 阅读目录 1 题目 2 解析 1 题目 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. ...
- 【Java】leetCode 21 合并两个有序链表
题目 : 将两个升序链表合并为一个新的 升序 链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 解题思路 : 1.依据以上两个升序链表进行拼接: 2.先定义一个傀儡节点newHead,用来 ...
- 合并两个有序链表分析
合并两个有序链表: 将两个升序链表合并为一个新的 升序 链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: l1 l2 输入:1->2->4, 1->3->4 ...
- 《LeetCode力扣练习》第21题 合并两个有序链表 Java
<LeetCode力扣练习>第21题 合并两个有序链表 Java 一.资源 题目: 将两个升序链表合并为一个新的 升序 链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例 ...
- 算法:合并两个有序链表
题目 合并两个有序链表 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出:1- ...
- LeetCode题组:第21题-合并两个有序链表
1.题目:合并两个有序链表 将两个升序链表合并为一个新的升序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出: ...
- LeetCode 21合并两个有序链表22括号生成
微信搜索bigsai,回复进群,加入打卡.维护不易,欢迎点赞支持! 合并两个有序列表 将两个升序链表合并为一个新的 升序 链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1 ...
最新文章
- linux基础文件管理基础命令
- tts代表_Text-to-Speech (TTS) Synthesis语音合成----控制语言合成
- 新来的前端小姐姐问:Vue路由history模式刷新页面出现404问题
- 纽交所再次反转重新推动“摘牌” 三大运营商回应来了
- 阿里通报前淘宝直播运营负责人违规:接受礼品及款待,安排女友入职合作方...
- Mac 10.12安装IntelliJ出品的数据库管理工具DataGrip
- 华三 h3c ospf、rip 路由引入和路由策略
- 5.go 代码包 package
- 的唯一性_原神:被氪金玩家淹没的角色,输出很高,技能具有唯一性
- 多个Gbase集群间表同步思路
- html中class类怎么写,HTML class 属性 | 菜鸟教程
- 景区大数据可视化交互系统-全方位旅游服务平台,打造景区信息数据管理分析平台
- navigator对象的主要属性介绍
- 14年间,用友U9 cloud如何让众多“专精特新”成长为行业冠军
- uniapp picker选择器注意点
- Word中在囗中打勾或打叉的方法介绍
- 把图片转换成视频-ffmpeg
- form表单用butten提交后无反应表单提交三种方式
- 无盘服务器0x00000124,蓝屏0x00000124,懂的帮我一下
- java根据ip地址获取城市地域信息