2181. Merge Nodes in Between Zeros

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def mergeNodes(self, head: Optional[ListNode]) -> Optional[ListNode]:
        lastZeroNode = None
        total = 0

        def travel(node):
            nonlocal lastZeroNode, total            
            if node:
                if node.val == 0:
                    if lastZeroNode:
                        lastZeroNode.val = total   
                        lastZeroNode.next = node.next
                        lastZeroNode = node.next
                    else:
                        lastZeroNode = node

                    # Reset total at every zero
                    total = 0                                    

                # Add to total
                total += node.val

                # Go to next node
                travel(node.next)

        travel(head)
        return head



        return head