--- title: '92. Reverse Linked List II' description: Given the head of a singly linked list and two integers left and right where left <= right, reverse the nodes of the list from position left to position right, and return the reversed list icon: dot topics: - { name: "Linked List", slug: "linked-list" } issue: "https://github.com/prdlk/leetcode/issues/83" sidebar: label: 'Reverse Linked List II' badge: 'Medium' --- ::::warning Could you do it in one pass? :::: ### Example 1: - Input: `head = [1,2,3,4,5], left = 2, right = 4` - Output: `[1,4,3,2,5]` ### Example 2: - Input: `head = [5], left = 1, right = 1` - Output: `[5]` ### Constraints: - The number of nodes in the list is n. - `1 <= n <= 500` - `-500 <= Node.val <= 500` - `1 <= left <= right <= n` ## Solution ```py # Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution: def reverseBetween( self, head: ListNode | None, left: int, right: int ) -> ListNode | None: cur, prev = head, None while left > 1: prev = cur cur = cur.next left, right = left - 1, right - 1 tail, con = cur, prev while right: third = cur.next cur.next = prev prev = cur cur = third right -= 1 if con: con.next = prev else: head = prev tail.next = cur return head ```