Reverse Nodes in k-Group (LC-0025)

class Solution:
    def reverseKGroup(self, head, k):

        def revk(node, k):
            prev, curr = None, node
            while k > 0 and curr:
                k, prev, curr.next, curr = k - 1, curr, prev, curr.next
            return prev, curr, k == 0

        result = rptr = ListNode(-1)
        
        curr = head
        while curr:
            processed, unprocessed, success = revk(curr, k)
            while rptr and rptr.next: rptr = rptr.next
            rptr.next = processed if success else revk(processed, k)[0]
            curr = unprocessed
        
        return result.next