leetcode递归21、24

21.合并2个有序列表

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

 有循环过程时可用递归

递归要注意3点:

  1. 终止条件
  2. 递归调用过程
  3. 要考虑1、2的顺序
class Solution:
    def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
        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

(1)终止条件:第三行可以看作是 l1非空时为not null,if  not not null就是if 0,不执行。若l1为null则if not null为if 1则执行。(第四行同理)
(2)递归调用:ListNode.next=。。。是赋值给下一个指针指向的位置(这个位置是一个整体,可以有多个节点或是一个函数)


24.两两交换链表中的节点

题目:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

依然是3个条件:

  1. 终止条件
  2. 递归调用过程
  3. 要考虑1、2的顺序
class Solution:
    def swapPairs(self, head: ListNode) -> ListNode:
        if not head or not head.next: return head  #终止条件  head 和head.next不能颠倒
        newhead=head.next                          #递归调用
        head.next=self.swapPairs(newhead.next)
        newhead.next=head
        return newhead

 【注】必须要命名newhead,因为当head.next不指向第二个节点,第二个节点就无法调用

 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值