LeetCode专题-Python实现之第21题:Merge Two Sorted Lists
相关代码已经上传到github:https://github.com/exploitht/leetcode-python
文中代码为了不动官网提供的初始几行代码内容,有一些不规范的地方,比如函数名大小写问题等等;更合理的代码实现参考我的github repo
1、读题
Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.
这道题说要合并提供的2个排好序的链接表,要求得到的新链表是2个旧链表的结点拼接得来。换言之该索引而不创建结点对象。
2、解题
有序总比无序要简单很多,既然2个链表都是有序的,那么每次都取2个链表的第一个元素中小的一个然后注意边界判断,就能解决问题了。具体逻辑参考代码及注释,代码如下:
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def mergeTwoLists(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
# 2个有序列表合并成1个列表
# 如果l1为空,返回l2;如果l2为空,返回l1
# 如果l1和l2都不为空,result_head取l1和l2中小的一个,小的一个指向自己的next
# 如果有一个列表发现自己的下一个为空,也就是完成遍历,这时候将另外一个列表的next直接给result
# 有一个链表为空则返回另外一个链表
if l1 is None:
return l2
elif l2 is None:
return l1
# flag和head开始是同一个结点,flag引用会不断后移,head负责保留头结点索引
result_flag = ListNode(0)
result_head = result_flag
while True:
# 进入循环的时候2个链表都不为空
# 保证l1指向的结点值小于l2指向的结点值
(l1, l2) = (l1, l2) if l1.val < l2.val else (l2, l1)
# 因为l1是小值,所以丢给前一个结点的next引用,flag索引后移
result_flag.next = l1
result_flag = result_flag.next
# 因为每次取走的都是较小值开头的列表,所以要只能是这个列表先取完(小值还有不会操作大值)
# 故只需要判断小值开头的l1的next是不是空就行
if l1.next is None:
# l1没有下一个元素了,这时候不管l2还有多少元素,直接丢给结果指针的next就行了
result_flag.next = l2
return result_head.next
else:
l1 = l1.next
LeetCode专题-Python实现之第21题:Merge Two Sorted Lists的更多相关文章
- [LC]21题 Merge Two Sorted Lists (合并两个有序链表)(链表)
①英文题目 Merge two sorted linked lists and return it as a new list. The new list should be made by spli ...
- 【LeetCode算法-21】Merge Two Sorted Lists
LeetCode第21题 Merge two sorted linked lists and return it as a new list. The new list should be made ...
- LeetCode专题-Python实现之第28题: Implement strStr()
导航页-LeetCode专题-Python实现 相关代码已经上传到github:https://github.com/exploitht/leetcode-python 文中代码为了不动官网提供的初始 ...
- LeetCode专题-Python实现之第27题:Remove Element
导航页-LeetCode专题-Python实现 相关代码已经上传到github:https://github.com/exploitht/leetcode-python 文中代码为了不动官网提供的初始 ...
- LeetCode专题-Python实现之第26题:Remove Duplicates from Sorted Array
导航页-LeetCode专题-Python实现 相关代码已经上传到github:https://github.com/exploitht/leetcode-python 文中代码为了不动官网提供的初始 ...
- LeetCode专题-Python实现之第20题:Valid Parentheses
导航页-LeetCode专题-Python实现 相关代码已经上传到github:https://github.com/exploitht/leetcode-python 文中代码为了不动官网提供的初始 ...
- LeetCode专题-Python实现之第9题:Palindrome Number
导航页-LeetCode专题-Python实现 相关代码已经上传到github:https://github.com/exploitht/leetcode-python 文中代码为了不动官网提供的初始 ...
- LeetCode专题-Python实现之第14题:Longest Common Prefix
导航页-LeetCode专题-Python实现 相关代码已经上传到github:https://github.com/exploitht/leetcode-python 文中代码为了不动官网提供的初始 ...
- LeetCode专题-Python实现之第13题:Roman to Integer
导航页-LeetCode专题-Python实现 相关代码已经上传到github:https://github.com/exploitht/leetcode-python 文中代码为了不动官网提供的初始 ...
随机推荐
- 01安装Python虚拟环境
链接 一,为什么安装虚拟环境? 如果你有0.1版本的Flask已经完成项目,此时Flask1.1版本出来的时候就会对0.1有影响,我们通过虚拟环境可以做到互补影响. 二,安装方法 cmd--pip-- ...
- 多阶段构建Docker镜像
在Docker 17.05及更高的版本中支持支持一种全新的构建镜像模式:多阶段构建: 多阶段构建Docker镜像的最大好处是使构建出来的镜像变得更小: 目前常见的两个构建镜像的方式为: 1.直接使用某 ...
- Tips_钉钉免登前端实现
1.需求:开发钉钉微应用,需要实现钉钉的免登陆功能. #.其实钉钉的文档中心还是很详细的,只是刚开始接触会一头雾水,所以花费了挺多时间....... ?什么是钉钉免登功能. ?企业应用免登开发授权流程 ...
- Get API
根据索引.类型和ID获取文档 GET twitter/_doc/1 返回结果如下: { "_index": "twitter", "_type&quo ...
- java.net.ConnectException: Connection refused 异常
错误信息: java.net.ConnectException: Connection refused at java.net.PlainSocketImpl.socketConnect(Native ...
- thinkphp 找数据库某个字段为空的数据,PHP 数据调取 空数据
$arr['dingwei'] = array('EXP','is null');
- unittest生产html测试报告
需要添加HTMLTestRunner.py文件,我用的ubuntu16.04下的python3.5.2,所以我放在/usr/lib/python3.5下 import unittest import ...
- SQL Server 创建服务器和数据库级别审计
一.概述 在上一篇文章中已经介绍了审计的概念:本篇文章主要介绍如何创建审计,以及该收集哪些审核规范. 二.常用的审核对象 2.1.服务器审核对象 1.FAILED_LOGIN_GROUP( Audit ...
- emWin洗衣机简易操作界面,含uCOS-III和FreeRTOS两个版本
第3期:洗衣机简易操作界面 配套例子:V6-904_STemWin提高篇实验_洗衣机简易操作界面(uCOS-III)V6-905_STemWin提高篇实验_洗衣机简易操作界面(FreeRTOS) 例程 ...
- Java线程中的同步
1.对象与锁 每一个Object类及其子类的实例都拥有一个锁.其中,标量类型int,float等不是对象类型,但是标量类型可以通过其包装类来作为锁.单独的成员变量是不能被标明为同步的.锁只能用在使用了 ...