开始之前:从2018/8/27开始刷LeetCode,计划每周刷五题,周末进行总结并发布在csdn上,计划先刷150道题,从简单开始。
week 2-2
要求:
CODE:
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def mergeTwoLists(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
# 设置终止条件:当一个链表无节点时,返回另一个链表作为下一个节点
if not l1:
return l2
if not l2:
return l1
if l1.val <= l2.val: # 当l1节点的值<=l2节点的值时
l1.next = self.mergeTwoLists(l1.next,l2) # l1链接到(l1后一个节点和l2节点中小的那个)
return l1 # 当下一个节点确定之后,返回当前链表
else:
l2.next = self.mergeTwoLists(l2.next,l1)
return l2
结果:
知识点:
初识递归
1. 递归必须要存在终止条件;
扫描二维码关注公众号,回复:
3223593 查看本文章
2. 所有的递归都是可以用循环来代替的;
3. 所谓的递归就是不断地调用同一个函数做同样的事情,直到终止条件,所以在每个递归循环中不要去整体考虑,而只是考虑一个当前步骤,这样会简单不少;
简单来说,递归就考虑两个问题就够了:1. 每一个循环需要执行什么, 2.到了终止条件需要执行什么。