Reverse Linked List II — In-Place Partial Reversal

Sanjeev SharmaSanjeev Sharma
2 min read

Advertisement

Problem 235 · Reverse Linked List II

Difficulty: Medium · Pattern: Partial In-Place Reversal

Reverse nodes from position left to right (1-indexed) in one pass.

Solutions

# Python
def reverseBetween(head, left, right):
    dummy = ListNode(0, head)
    prev = dummy
    # Advance to node before left
    for _ in range(left - 1): prev = prev.next
    cur = prev.next
    # Reverse (right - left) times
    for _ in range(right - left):
        nxt = cur.next
        cur.next = nxt.next
        nxt.next = prev.next
        prev.next = nxt
    return dummy.next
// Java
public ListNode reverseBetween(ListNode head, int left, int right) {
    ListNode dummy = new ListNode(0, head), prev = dummy;
    for (int i = 1; i < left; i++) prev = prev.next;
    ListNode cur = prev.next;
    for (int i = 0; i < right - left; i++) {
        ListNode nxt = cur.next;
        cur.next = nxt.next; nxt.next = prev.next; prev.next = nxt;
    }
    return dummy.next;
}
// C++
ListNode* reverseBetween(ListNode* head, int left, int right) {
    ListNode dummy(0, head), *prev = &dummy;
    for (int i = 1; i < left; i++) prev = prev->next;
    ListNode *cur = prev->next;
    for (int i = 0; i < right-left; i++) {
        ListNode *nxt = cur->next;
        cur->next = nxt->next; nxt->next = prev->next; prev->next = nxt;
    }
    return dummy.next;
}

Complexity

  • Time: O(n)
  • Space: O(1)

Advertisement

Sanjeev Sharma

Written by

Sanjeev Sharma

Full Stack Engineer · E-mopro