要将指定区间内的链表整体反过来
做简要说明:
1.为什么要插入头节点:因为在第一个位置进行反转时,后续要用到pre->next,none类型是没有next的,所以得加头节点,上一题只动了current节点,没有用到pre节点的next,所以不要加
2.pre节点在翻转阶段一直停留在被反转部分所以的后一个ListNode上
curr节点一直在被翻转部分的第一个节点上
3:单步操作:
(1)将要反转部分的第一个节点始终移动到队头,即每次往前挪动一个位置
(2)将队头元素的前一个节点移动到队尾。注意,这里要与两个节点的next进行修改,以完成拼接
4:关于存哪些变量:
以向右为先序,依次进行操作,如果动到Listnode的NEXT了,如果后续还需要这个结果(一定需要),进行寄存,总之你要想一下动了之后整个链有没有断掉
class Solution:
def reverseBetween(self , head: ListNode, m: int, n: int) -> ListNode:
# write code here
#初始化头节点
head_node=ListNode(-1)
head_node.next=head
#初始化:curr,pre
curr=head
pre=head_node
#第一段,定位到要进行翻转的位置:
for i in range(1,m):
pre=curr
curr=curr.next
#第二段开始不停的翻转:
for i in range(m,n):
#要被移动到队尾的元素
temp=curr.next
#先定新队头
curr.next=temp.next
#后定新队尾(2步)
temp.next=pre.next
pre.next=temp
return head_node.next