Time: 4 ms (13.43%), Space: 18.5 MB (85.36%) - LeetHub

This commit is contained in:
Deven
2025-12-08 18:17:52 -05:00
parent f174c1edea
commit 6bc1bcb772
@@ -0,0 +1,68 @@
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def reverseKGroup(self, head: Optional[ListNode], k: int) -> Optional[ListNode]:
if k == 1:
return head
dummyHead = ListNode(-1, head)
beforeSeg = dummyHead
firstInSeg = head
lastInSeg = None
afterSeg = None
# Get initial values for lastInSeg and afterSeg
curr = head
for i in range(k):
if i == k - 1:
lastInSeg = curr
afterSeg = curr.next
elif curr is None:
return head
curr = curr.next
# hold one before segment
# hold last in segment
# hold one after segment
while lastInSeg is not None:
# in segment, flip all links
prev = None
curr = beforeSeg.next
next = beforeSeg.next.next
for i in range(k):
newPrev = curr
newCurr = next
newNext = next.next if next is not None else None
curr.next = prev
prev, curr, next = newPrev, newCurr, newNext
beforeSeg.next = lastInSeg
firstInSeg.next = afterSeg
beforeSeg = firstInSeg
firstInSeg = afterSeg
curr = firstInSeg
lastInSeg = None
afterSeg = None
for i in range(k):
if curr is None:
break
elif i == k - 1:
lastInSeg = curr
afterSeg = curr.next
curr = curr.next
return dummyHead.next