# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param head1 ListNode类 
# @param head2 ListNode类 
# @return ListNode类
#
class Solution:
    def addInList(self , head1: ListNode, head2: ListNode) -> ListNode:
        # write code here
        reversed1 = self.reverseList(head1)
        reversed2 = self.reverseList(head2)

        dummy = ListNode(0)
        current = dummy
        carry = 0

        while reversed1 or reversed2 or carry:
            val1 = reversed1.val if reversed1 else 0
            val2 = reversed2.val if reversed2 else 0
            total = val1 + val2 + carry
            carry = total // 10
            current.next = ListNode(total % 10)
            current = current.next 

            if reversed1:
                reversed1 = reversed1.next
            if reversed2:
                reversed2 = reversed2.next

        result = self.reverseList(dummy.next)
        return result


    def reverseList(self, pHead):
        if not pHead:
            return None
        prev = None
        curr = pHead
        while curr:
            next_node = curr.next
            curr.next = prev
            prev = curr
            curr =next_node

        return prev