Reverse Linked List II — In-Place Partial Reversal
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