case很多,值得再次琢磨
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def reverseBetween(self, head: ListNode, m: int, n: int) -> ListNode:
if head is None or head.next is None or m >= n:
return head
delta = n - m
dummy = ListNode()
dummy.next = head
p = dummy
q = head
r = head.next
right = head
#p指向第m-1个节点,q指向需要调整的节点,r指向需要调整节点的下一个节点,right指向第m个节点,也就是n+1之后节点的头节点
counter = 0
while r and counter < n:
if counter < m - 1:
p = p.next
r = r.next
q = q.next
else:
if counter == m - 1:
right = q
q = r
r = r.next
if m-1 < counter < n:
q.next = p.next
p.next = q
q = r
r = r.next
counter += 1
right.next = q
if counter < n:
if r is None:
right.next = None
# righ.next = None
q.next = p.next
p.next = q
return dummy.next
网友评论