因爲是中間一部分發生逆轉,
最後的字符串爲 左正序鏈表+中間逆序鏈表+右邊正序鏈表
所以要安排幾個指針分別存放左正序鏈表的頭和尾,中間逆序鏈表的頭和尾,右邊正序鏈表的頭。
首先我們要給鏈表加個空頭,因爲有可能從第一個數字就開始旋轉。
然後先找到左索引的前一個數字,也就是正序鏈表的尾指針
再找到右索引,從左索引到右索引的鏈表要進行逆序,可以依次逆轉,因此要設置逆轉完的頭指針和尾指針,只要頭指針不是右索引就依次懟進去。
最後鏈接起來。
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def reverseBetween(self, head: ListNode, m: int, n: int) -> ListNode:
if m==n:
return head
p=ListNode(0)
p.next=head
head=p1=p2=p
while(p):
if m==1:
p1=p
if n==0:
p2=p
h=t=p1.next
while(h!=p2):
tmp=t.next.next
t.next.next=h
h=t.next
t.next=tmp
p1.next=h
break
p=p.next
m-=1
n-=1
return head.next