From 6bc1bcb772f53e7feb351d62a63b33ac94cee147 Mon Sep 17 00:00:00 2001 From: Deven <63876261+devenperez@users.noreply.github.com> Date: Mon, 8 Dec 2025 18:17:52 -0500 Subject: [PATCH] Time: 4 ms (13.43%), Space: 18.5 MB (85.36%) - LeetHub --- .../0025-reverse-nodes-in-k-group.py | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 0025-reverse-nodes-in-k-group/0025-reverse-nodes-in-k-group.py diff --git a/0025-reverse-nodes-in-k-group/0025-reverse-nodes-in-k-group.py b/0025-reverse-nodes-in-k-group/0025-reverse-nodes-in-k-group.py new file mode 100644 index 0000000..4ae53aa --- /dev/null +++ b/0025-reverse-nodes-in-k-group/0025-reverse-nodes-in-k-group.py @@ -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 \ No newline at end of file