力扣刷题Python笔记:合并两个有序链表

题目

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
力扣刷题Python笔记:合并两个有序链表_第1张图片
来源:力扣(LeetCode)

python解法

看到这道题还以为是双指针解法,结果解了半个小时代码直接运行超出时间限制,也不知道自己写的对不对,而看了题解才知道得用递归思想。

递归解法

以下思路和代码来自力扣题解。

所谓的递归,是指不断地调用自身,直到遇见终止条件,然后回溯得到最终结果。
对于本题来说,其终止条件是:当两个链表都为空时,表示对链表已合并完成;其递归方法是:判断链表 l1 和 l2 的头结点哪个更小,然后较小结点的 next 指针指向其余结点的合并结果。(调用递归)

代码如下:

def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
    # l1(l2)为空,说明l1(l2)已经遍历完,返回剩下的l2(l1)即可
    if not l1: return l2
    if not l2: return l1
    if l1.val <= l2.val:  # 递归调用
        l1.next = self.mergeTwoLists(l1.next, l2)
        return l1
    else:
        l2.next = self.mergeTwoLists(l1, l2.next)
        return l2

你可能感兴趣的:(力扣python刷题,算法)