zoukankan      html  css  js  c++  java
  • LeetCode专题-Python实现之第21题:Merge Two Sorted Lists

    导航页-LeetCode专题-Python实现

    相关代码已经上传到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
    
  • 相关阅读:
    Top 10 Product Manager Skills To Boost Your Resume In 2021
    大数据知识梳理
    B端产品如何设计权限系统?
    华三盒式交换机MAC、ARP、Route性能表项参数查询
    中了传说中的挖矿病毒
    SqlServer 2019 事务日志传送
    docker中生成的pdf中文是方框的解决方案
    The Live Editor is unable to run in the current system configuration
    2021 面试题大纲
    五分钟搞定Docker安装ElasticSearch
  • 原文地址:https://www.cnblogs.com/cloudgeek/p/7656936.html
Copyright © 2011-2022 走看看