给你单链表的头指针 head
和两个整数 left
和 right
,其中 left <= right
。请你反转从位置 left
到位置 right
的链表节点,返回 反转后的链表 。
要反转单链表中从位置 left
到位置 right
的节点,可以按照以下步骤进行:
- 使用两个指针,prev 指向反转区间的前一个节点,curr 指向反转区间的第一个节点。通过遍历,移动指针到达 left 位置。
- 设定一个指针 tail 指向 curr(即反转区间的第一个节点),然后逐个反转链表节点,直到到达 right 位置。使用一个循环来改变每个节点的 next 指针,实现节点反转。
- 将反转后的链表连接到前驱节点和后续节点。prev.next 指向反转后的头节点,tail.next 指向 right 位置之后的节点。
class Solution:
def reverseBetween(self, head: ListNode, left: int, right: int) -> ListNode:
if not head or left == right:
return head
dummy = ListNode(0)
dummy.next = head
prev = dummy
# 找到反转区间的前驱节点
for _ in range(left - 1):
prev = prev.next
curr = prev.next # 反转区间的第一个节点
tail = curr # 记录反转区间的头节点
# 反转链表区间
for _ in range(right - left + 1):
curr_next = curr.next
curr.next = prev.next
prev.next = curr
curr = curr_next
tail.next = curr # 连接反转后的链表
return dummy.next # 返回新的头节点