Scribbling

LeetCode: 25. Reverse Nodes in k-Group 본문

Computer Science/Coding Test

LeetCode: 25. Reverse Nodes in k-Group

focalpoint 2021. 8. 25. 22:55

Recursion solution.

Time Complexity: O(N), Memory Complexity: O(1)

# 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]:
        return self.helper(head, k)
        
    def helper(self, node, k):
        if not node:
            return None
        
        cur = node
        for i in range(k-1):
            cur = cur.next
            if cur == None:
                return node
        next_node = cur.next
        
        new_head = self.reverse(node, k)
        node.next = self.helper(next_node, k)
        return new_head
    
    def reverse(self, node, k):
        prv, cur = None, node
        for i in range(k):
            nxt = cur.next
            cur.next = prv
            prv = cur
            cur = nxt
        return prv