reverse_nodes_in_k_group

 1from typing import Optional
 2from utils import ListNode
 3
 4
 5# @leet start
 6class Solution:
 7    def reverseKGroup(self, head: Optional[ListNode], k: int) -> Optional[ListNode]:
 8        count = 0
 9        ptr = head
10        while count < k and ptr:
11            ptr = ptr.next
12            count += 1
13
14        if count == k:
15            reversed_head = self.reverse_linked_list(head, k)
16            head.next = self.reverseKGroup(ptr, k)
17            return reversed_head
18        return head
19
20    def reverse_linked_list(self, head, k):
21        new_head, ptr = None, head
22
23        while k:
24            next_node = ptr.next
25            ptr.next = new_head
26            new_head = ptr
27            ptr = next_node
28            k -= 1
29        return new_head
30
31
32# @leet end
33
34
35def test():
36    assert 2 + 2 == 4
class Solution:
 7class Solution:
 8    def reverseKGroup(self, head: Optional[ListNode], k: int) -> Optional[ListNode]:
 9        count = 0
10        ptr = head
11        while count < k and ptr:
12            ptr = ptr.next
13            count += 1
14
15        if count == k:
16            reversed_head = self.reverse_linked_list(head, k)
17            head.next = self.reverseKGroup(ptr, k)
18            return reversed_head
19        return head
20
21    def reverse_linked_list(self, head, k):
22        new_head, ptr = None, head
23
24        while k:
25            next_node = ptr.next
26            ptr.next = new_head
27            new_head = ptr
28            ptr = next_node
29            k -= 1
30        return new_head
def reverseKGroup(self, head: Optional[utils.ListNode], k: int) -> Optional[utils.ListNode]:
 8    def reverseKGroup(self, head: Optional[ListNode], k: int) -> Optional[ListNode]:
 9        count = 0
10        ptr = head
11        while count < k and ptr:
12            ptr = ptr.next
13            count += 1
14
15        if count == k:
16            reversed_head = self.reverse_linked_list(head, k)
17            head.next = self.reverseKGroup(ptr, k)
18            return reversed_head
19        return head
def reverse_linked_list(self, head, k):
21    def reverse_linked_list(self, head, k):
22        new_head, ptr = None, head
23
24        while k:
25            next_node = ptr.next
26            ptr.next = new_head
27            new_head = ptr
28            ptr = next_node
29            k -= 1
30        return new_head
def test():
36def test():
37    assert 2 + 2 == 4