python每日一练-合并两个有序的链表(超详细讲解)

先来看题:
在这里插入图片描述
首先对于链表我也是首次接触,所以自己取学习了一下关于链表的知识。
首先我们先来看题目,因为本题目需要使用到递归的方法,所以我们首先先来介绍一下什么是递归?递归又是怎么用的?
函数在运行时调用自己,这个函数就是递归函数。调用的过程就叫做递归。

def f(x):
    return x+f(x-1)

其实这就是相当于一个函数
f(x)=x+f(x-1),但是这个函数如果不给予限制,那么他无穷无尽的循环,直到系统崩溃。
所以:

  • 递归函数必须要有终止条件,否则就会出错。
  • 递归函数先不断的调用自身,直到遇到了终止条件进行回溯,然后返回答案。
def f(x):
    if x>0:
        return x+f(x-1)
    else:
        return 0

这里我们就给递归加上了一个条件,就是在x>0的情况下呢,我们返回x+f(x-1)。那么我们加入输入f(2),就会得到
f(2)=2+f(1)=2+1+f(0)=2+1+0=3,返回结果。

然后我们来分析一下这道题,首先我们可以简单的判断,如果两个链表有一个是空的,则可以直接返回另一个。如果两个链表都存在,因为是有序链表,所以我们首先判断一下,两个链表的第一个元素的大小,把小的留下,小的剩余部分和另外大的链表直接全部打包,扔给本身函数继续调用,然后重复这个过程。

def mergeTwoLists(self, list1: Optional[ListNode], list2: Optional[ListNode]) -> Optional[ListNode]:
		if not list1:
		    return list2
		if not list2:
		    return list1
		if list1.val<=list2.val:#这里代表链表的第一个元素
		    list1.next=self.mergeTwoLists(list1.next,list2)
		    return list1
		else:
		    list2.next=self.mergeTwoLists(list1,list2.next)
		    return list2

在这里我们继续解释一下这个过程,前面我们都明白,就是如果有一个链表空了,则把另外一个链表直接打包全部返回。如果两个链表没有空,则判断两个链表的第一个元素的大小,然后return 较小的一个。然后把除了这个最小的剩下的链表和另外一个链表打包成一个包裹,再次扔给函数本身。然后继续调用。

今天的每日一练到这里就结束了,希望同学们继续努力加油 !!!

猜你喜欢

转载自blog.csdn.net/m0_37623374/article/details/124757960