def reverse_between(head,left,right):
dummy=type('N',(),{'val':0,'next':head})()
pre=dummy
for _ in range(left-1): pre=pre.next
cur=pre.next
for _ in range(right-left):
nxt=cur.next; cur.next=nxt.next
nxt.next=pre.next; pre.next=nxt
return dummy.next
public ListNode reverseBetween(ListNode head,int left,int right){
ListNode dummy=new ListNode(0); dummy.next=head; ListNode pre=dummy;
for(int i=0;i<left-1;i++) pre=pre.next;
ListNode cur=pre.next;
for(int i=0;i<right-left;i++){
ListNode nxt=cur.next; cur.next=nxt.next;
nxt.next=pre.next; pre.next=nxt;
} return dummy.next;
}
In-place partial reversal. range vs loop.
def reverse_between(head,left,right):
dummy=type('N',(),{'val':0,'next':head})()
pre=dummy
for _ in range(left-1): pre=pre.next
cur=pre.next
for _ in range(right-left):
nxt=cur.next; cur.next=nxt.next
nxt.next=pre.next; pre.next=nxt
return dummy.next
public ListNode reverseBetween(ListNode head,int left,int right){
ListNode dummy=new ListNode(0); dummy.next=head; ListNode pre=dummy;
for(int i=0;i<left-1;i++) pre=pre.next;
ListNode cur=pre.next;
for(int i=0;i<right-left;i++){
ListNode nxt=cur.next; cur.next=nxt.next;
nxt.next=pre.next; pre.next=nxt;
} return dummy.next;
}
1. Navigate to left 2. Reverse right-left times