92. Reverse Linked List II
Medium
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 = 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
Follow up: Could you do it in one pass?
class Solution:
def reverseBetween(self, head: Optional[ListNode], left: int, right: int) -> Optional[ListNode]:
if left == right or not head:
return head
starting = head
stack = []
count = 0
leftNodePrev = None
rightNodeNext = None
prev = None
while head:
count += 1
if left <= count <= right:
if left == count:
leftNodePrev = prev
if right == count:
rightNodeNext = head.next
stack.append(head)
prev = head
head = head.next
d = dummy = ListNode()
while stack:
dummy.next = stack.pop()
dummy = dummy.next
if leftNodePrev:
leftNodePrev.next = d.next
else:
starting = d.next
dummy.next = rightNodeNext
return starting
Last updated