难度:中等
题目描述:
思路总结:前几天做过一个206.反转链表,是个简单题,是整个链表的反转,这里是部分链表的翻转,因此需要增加一个while循环先让指针到达指定位置,然后再使用con和tail指针来记录m位置前一个节点和反转链表的最后一个节点。
题解一:
# 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 not head:
return None
pre, cur = None, head
while m > 1:
pre = cur
cur = cur.next
m -= 1
n -= 1
con, tail = pre, cur
while n:
tmp = cur.next
cur.next = pre
pre = cur
cur = tmp
n -= 1
if con:
con.next = pre
else:
head = pre
tail.next = cur
return head