怎么说呢,太久没刷连反转链表都忘了
我本以为,写点注释的话能更好地记起代码是干嘛的,没想到啊没想到,我连注释都看不懂 我以后不写注释辣!
本题我的思路是:首先拆分链表,分为{1~m-1, m~n, n+1~end}三个部分;然后对m~n的部分进行反转;最后合并链表
代码如下:

def reverseBetween(self , head: ListNode, m: int, n: int) -> ListNode:
	mNodeFront, mNode, nNodeNext = None, None, None
	p = head
    
	# 将链表分为三部分
	# 记录第一部分的尾结点,第二部分的头结点以及第三部分的头结点
	if m == 1:
		mNode = head
	i = 1
	while p != None:
		if i == m - 1:
			mNodeFront = p
			mNode = p.next
		if i == n:
			nNodeNext = p.next
			p.next = None
		p = p.next
		i += 1

	# 接下来反转并合并链表
	betweenHead = self.reverseList(mNode)
	betweenTail = self.getTail(betweenHead)
	betweenTail.next = nNodeNext
	if m == 1:									#判断是否表头
		head = betweenHead
	else:
		mNodeFront.next = betweenHead

	return head


def reverseList(self, head) -> ListNode:		# 反转链表
	p = head
	head = None
	while p != None:
		q = p.next
		p.next = head
		head = p
		p = q

	return head


def getTail(self, head) -> ListNode:		# 寻找链表尾结点
	while head != None:					 # 找二部分尾结点用的 
		if head.next == None:
			return head
		head = head.next

	return None

说真的,写完一次过我还挺开心的
直到我翻了翻评论寻找最优的代码 我就不该看评论
贴在下面了,真的短小精悍,这就是人类的参差吗?
alt 用我能表述的人话来说就是:反转的部分将倒数第n-1项、倒数第n-2项、……、倒数第1项依次提至最前(n不是题中的n)
看懂之后我直呼牛逼,学艺不精只会牛逼
人的能力是有极限的,我不做人了!