Reverse Linked List II

Problem page:https://leetcode.com/problems/reverse-linked-list-ii

Solution

class Solution:
    def reverseBetween(self, head: Optional[ListNode], left: int, right: int) -> Optional[ListNode]:
        if not head or left == right:
            return head
        sentinel = ListNode(0,head)
        pre = sentinel
        for _ in range(left - 1):
            pre = pre.next
        cur = pre.next
        for _ in range(right - left):
            temp = cur.next
            cur.next = temp.next
            temp.next = pre.next
            pre.next = temp
        return sentinel.next

Complexity

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