LeeCode每日一题--合并两个有序链表

  【前言】坚持日更LeeCode刷题系列

    不积跬步,无以至千里;不积小流,无以成江海。愿与诸君共勉!


  【题目】21.合并两个有序链表

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


    示例:

    	示例 1:
    		输入:1->2->4, 1->3->4
			输出:1->1->2->3->4->4

    思路一:创建一个空链表,当两个链表的值依次比较,较小的值加入到链表中,直到有一个链表节点所在位置为空,此时将另一个链表直接加入到创建的链表中。具体代码如下:

# 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
        """
        l3 = ListNode(-1)  #定义空链表
        prev = l3   
        #思考一下,如果不用prev进行下面的操作,而是直接用l3会是怎样呢?
        while l1 and l2:  #当l1或l2为空时,结束循环
            if l1.val <= l2.val:
                prev.next = l1   #l1值小于l2值,则将prev的下一个指针指向l1
                l1  = l1.next   #并且通过指针的方式更新l1位置
            elif l1.val > l2.val:
                prev.next = l2
                l2 = l2.next
            prev = prev.next #更新prev位置
        if l1:  
            prev.next = l1  #l2为空则添加l1
        else:
            prev.next = l2  #l1为空则添加l2
        return l3.next

    运行结果:
    在这里插入图片描述

    思路二:采用递归的思想,每次将比较为小的元素的节点作为头节点,依次返回。直到其中一个为空时结束此过程。具体代码如下:

# 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
        """
        if l1 is None:
            return l2
        elif l2 is None:
            return l1
        elif l1.val<=l2.val:
            l1.next = self.mergeTwoLists(l1.next,l2)
            return l1
        else:
            l2.next = self.mergeTwoLists(l1,l2.next)
            return l2

    运行结果:
    在这里插入图片描述

    关于其中一些知识的链接:

    算法题解

    分享就到这里了,欢迎大家一起交流讨论。


    注明

    题目来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/merge-two-sorted-lists/

扫描二维码关注公众号,回复: 9770219 查看本文章
发布了32 篇原创文章 · 获赞 62 · 访问量 1306

猜你喜欢

转载自blog.csdn.net/Mingw_/article/details/104749674