Given the head of a singly linked list and two integers left and right where left <= right, reverse the nodes of the list from position left to position right, and return the reversed list.
Input: head = [1,2,3,4,5], left = 2, right = 4
Output: [1,4,3,2,5]
Input: head = [5], left = 1, right = 1
Output: [5]
Soruda bize bir linked list ve içerisinde iki nokta veriliyor.Bu iki nokta arasındaki nodeları ters çevirmemiz isteniyor.
Kod kısmında açıklamaları yazdım. Burada yardımcı olması açısından bir dummy node kullanıyoruz.Bu bir çok edge case önlüyor.
Daha sonra verilern iki nokta arasındaki nodeları ters çeviriyoruz.
Son olarakta pointerları düzenliyoruz.
classSolution:defreverseBetween(self,head:Optional[ListNode],left:int,right:int)->Optional[ListNode]:dummy=ListNode(0,head)#1) reach node at position "left"leftPrev,cur=dummy,headforiinrange(left-1):leftPrev,cur=cur,cur.next# Now cur="left", leftPrev="node before left"# 2) reverse from left to rightprev=Noneforiinrange(right-left+1):tmpNext=cur.nextcur.next=prevprev,cur=cur,tmpNext#3) Update pointersleftPrev.next.next=cur#cur is node after "right"leftPrev.next=prev#prev is rightreturndummy.next