Reverse Linked List II

Linked ListRecursion
https://leetcode.com/problems/reverse-linked-list-ii

# Definition for Singly-Linked List

class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None
1
2
3
4

# Solution

# Iteration

TODO: explain image

illustration

Complexity

time: O(n)O(n)
space: O(1)O(1)

def reverseBetween(self, head: Optional[ListNode], left: int, right: int) -> Optional[ListNode]:
    dummy = ListNode(next=head)
    p0 = dummy
    for _ in range(left-1):
        p0 = p0.next

    # reverse linked list btw `left` and `right`
    prev = p0
    curr = prev.next
    for _ in range(right-left+1):
        temp = curr.next
        curr.next = prev
        prev = curr
        curr = temp
    
    # update 2 pointers, refer to image
    p0.next.next = curr
    p0.next = prev
    return dummy.next
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19