2074. Reverse Nodes in Even Length Groups (Medium) - TengnanYao/daily_leetcode GitHub Wiki

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def reverseEvenLengthGroups(self, head: Optional[ListNode]) -> Optional[ListNode]:
        pre, cur, pre.next = head, head.next, None
        k = 2
        while cur:
            nodes = []
            while len(nodes) < k and cur:
                nodes.append(cur)
                cur.next, cur = None, cur.next
            flag = len(nodes) % 2
            while nodes:
                if flag:
                    pre.next = nodes.pop(0)
                else:
                    pre.next = nodes.pop()
                pre = pre.next
            k += 1
        return head