19. Reverse Linked List II 🔥
Medium
Problem:
Reverse the elements from index m to n. Index m starts from 1.
Input: head = [1,2,3,4,5], left = 2, right = 4
Output: [1,4,3,2,5]
Solution:
The assigned start
and end
values do not change until the end. The tmp
value is also always set to start.next
.
Let's say we have m = 2, n = 5 and the linked list looks like this: root -> 1 -> 2 -> 3 -> 4 -> 5 -> 6.
start = 1, end = 2, tmp = 2: 1 -> 3, 2 -> 4, 3 -> 2
start = 1, end = 2, tmp = 3: 1 -> 4, 2 -> 5, 4 -> 3
start = 1, end = 2, tmp = 4: 1 -> 5, 2 -> 6, 5 -> 4
start = 1, end = 2, tmp = 5: 1 -> 5 -> 4 -> 3 -> 2 -> 6
class Solution:
def reverseBetween(self, head: [ListNode], left: int, right: int) -> [ListNode]:
if not head or left == right:
return head
root = start = ListNode(None)
root.next = head
# start, end
for _ in range(left - 1):
start = start.next
end = start.next
# reverse
for _ in range(right - left):
tmp, start.next, end.next = start.next, end.next, end.next.next
start.next.next = tmp
return root.next
Last updated