#感觉写的很烧脑啊,应该有更简单的写法吧 #在head前面加个ph, p1指向上一个node,p指向当前,p1初始值ph , p初始值head,i为下标初始为1 #i<m是逐步后移,m n 之间是普通反转, 等于m或n时特殊处理 等于m时, 记录当时的 pm , pm1 等于n时, pm1.next = p pm.next = p.next p.next = p1 # 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 reverseBetween(self , head: ListNode, m: int, n: int) -> ListNode: # write code here i = 1 p = head p1 = None ph = ListNode(1) ph.next = head p1= ph while p and i<=n: if i<m : p1= p p = p.next elif i==m: pm = p pm1 = p1 p1=p p = p.next elif i>m and i<n: tmp = p.next p.next = p1 p1=p p = tmp elif i==n: pm1.next = p pm.next = p.next tmp = p.next p.next = p1 p1 = pm p = tmp i +=1 return ph.next ###还是人家的写法妙啊,每次就调整指向的那一位的位置 #{3,5,6,7,9,0},1,5 #[-1, 5, 3, 6, 7, 9, 0] #[-1, 6, 5, 3, 7, 9, 0] #[-1, 7, 6, 5, 3, 9, 0] #[-1, 9, 7, 6, 5, 3, 0] # from os import curdir # 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 reverseBetween(self , head: ListNode, m: int, n: int) -> ListNode: # write code here res = ListNode(-1) res.next = head pre = res cur = head for i in range(1,m): pre = cur cur = cur.next for i in range(m,n): temp = cur.next cur.next = temp.next temp.next = pre.next pre.next = temp # p =res # l = [] # while p: # l.append(p.val) # p= p.next # print(l) return res.next