python题解

首先找到n和m的位置,然后逆转,之后输出:

class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None

class Solution:
    def reverseBetween(self , head , m , n ):
        if m==n:return head    
        #题目中虽然限制了m和n的条件,节约了我们的代码,但是存在m==n的情况
        tmp = ListNode(None)
        tmp2 = head
        tmp.next = tmp2
        for i in range(m-1):#找到第n个位置
            tmp = tmp.next
            tmp2 = tmp2.next
        for i in range(n-m):#逆转m to n的链表
            tmp3 = tmp2.next
            tmp2.next = tmp3.next
            tmp3.next = tmp.next
            tmp.next = tmp3
        if m==1:return tmp.next #没有这个条件会卡在30%
        else :return head

还有一个方法我觉的很好用,

  1. 写一个reverse(),逆序链表
  2. 可以将链表分为三段,将需要逆序的链表传过去
  3. 组合返回