题解 | #链表内指定区间反转#
链表内指定区间反转
http://www.nowcoder.com/practice/b58434e200a648c589ca2063f1faf58c
【双指针+反转链表】
双指针确定反转区间的前一个节点pre,和后一个节点post
反转指定区间的内容,通过pre和post进行连接
特殊情况的处理:
- 当m=1时,pre=None,所以不必设置pre,同时直接返回post;否则,将pre接上后,返回head
# 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
cur,fast=head,head
if m>1:
i=1
while i<m-1:
cur=cur.next
i+=1
pre,cur=cur,cur.next
j=1
while j<n:
fast=fast.next
j+=1
post=fast.next
k=1
while k<=n-m+1:
tmp=cur.next
cur.next=post
post=cur
cur=tmp
k+=1
if m>1:
pre.next=post
return head
return post