class Solution(object): def reverseBetween(self, head, m, n): """ :type head: ListNode :type m: int :type n: int :rtype: ListNode """ # 创建一个头,如果从第一个翻转,这样会很方便 origin = ListNode(0) origin.next = head head = origin # A|BCDF|RG : 如果这么截取,那么A是0.0,B是0.1,F是1.0,R是1.1 i = 1 while i < m: head = head.next i += 1 place0_0 = head place0_1 = head.next while i < n + 1: head = head.next i += 1 place1_0 = head place1_1 = head.next # 翻转后拼接头尾 self.reverse(place0_1, n - m) place0_0.next = place1_0 place0_1.next = place1_1 # 删除一开始加入的头 return origin.next def reverse(self, head, count): """ 翻转count个节点 :param head: 翻转开始点 :param count: 要翻转的节点的个数 """ if head is None or head.next is None or count == 0: return head count -= 1 self.reverse(head.next, count) head.next.next = head head.next = None