注意

  1. m== 1 和n == 1是停止条件而非0
  2. 由于是翻转m和n之间的节点,所以需要记录n + 1个节点,翻转以后连起来
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

#
# 
# @param head ListNode类 
# @param m int整型 
# @param n int整型 
# @return ListNode类
#
class Solution:
    def reverseN(self, head, n):
        if n == 1:
            self.succ = head.next
            return head
        last = self.reverseN(head.next, n - 1)
        head.next.next = head
        head.next = self.succ
        return last

    def reverseBetween(self , head , m , n ):
        # write code here
        if m == 1:
            return self.reverseN(head, n)
        head.next = self.reverseBetween(head.next, m - 1, n - 1)
        return head