Leetcode 92 Reverse Linked List II
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.
class Solution:
def reverseBetween(self, head: Optional[ListNode], left: int, right: int) -> Optional[ListNode]:
dummy = ListNode(0,head)
#1) reach node at position "left"
leftPrev, cur = dummy, head
for i in range(left - 1):
leftPrev, cur = cur, cur.next
# Now cur="left", leftPrev="node before left"
# 2) reverse from left to right
prev = None
for i in range(right - left + 1):
tmpNext = cur.next
cur.next = prev
prev, cur = cur, tmpNext
#3) Update pointers
leftPrev.next.next = cur #cur is node after "right"
leftPrev.next = prev #prev is right
return dummy.next