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
    
  • 相关阅读:
    描述软件质量属性需求和质量属性场景(以淘宝网为例)
    软件架构初识
    机器学习实践02
    机器学习实践01
    机器学习十讲02
    用户故事与敏捷方法阅读笔记05
    机器学习十讲01
    用户故事与敏捷方法阅读笔记04
    tensorflow学习05(Mnist数据集)
    spring boot发送HTTP请求
  • 原文地址:https://www.cnblogs.com/cloudgeek/p/7656936.html
Copyright © 2011-2022 走看看