Table of Contents

## Question

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*.

**Example 1:**

Input:head = [1,2,3,4,5], left = 2, right = 4Output:[1,4,3,2,5]

**Example 2:**

Input:head = [5], left = 1, right = 1Output:[5]

**Constraints:**

- The number of nodes in the list is
`n`

. `1 <= n <= 500`

`-500 <= Node.val <= 500`

`1 <= left <= right <= n`

**Follow up:** Could you do it in one pass?

## Python Solution

# 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, left: int, right: int) -> ListNode: dummy = ListNode(0) dummy.next = head leftportion = dummy for _ in range(left-1): leftportion = leftportion.next curr = leftportion.next x = curr prev = None for _ in range(right-left+1): nex = curr.next curr.next = prev prev,curr = curr,nex leftportion.next = prev x.next = nex return dummy.next