跟着专注于计算机视觉的AndyJ的妈妈我学算法之每日一题leetcode92反转链表 II

这个题之前用比较垃圾的方法做的,就是最容易想到的那种,所以没写。然后今天看到了用回溯的解法,哇!!!爱了爱了,回溯真的强。这种优美的解法,真的应该背会。
废话不多说,看题看代码。
题目:

92. 反转链表 II
反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。

说明:
1 ≤ m ≤ n ≤ 链表长度。

示例:
输入: 1->2->3->4->5->NULL, m = 2, n = 4
输出: 1->4->3->2->5->NULL

代码:

class Solution(object):
    def reverseBetween(self, head, m, n):
        """
        :type head: ListNode
        :type m: int
        :type n: int
        :rtype: ListNode
        """
        if m==1:
            return self.reverse(head, n)
        head.next = self.reverseBetween(head.next, m-1, n-1)
        return head

    def reverse(self, head, n):
        if n==1:
            self.part2 = head.next
            return head
        last = self.reverse(head.next, n-1)
        head.next.next = head
        head.next = self.part2
        return last

好了。真的该背会,这种题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值