https://leetcode.com/problems/add-two-numbers/?envType=study-plan-v2&envId=top-interview-150

def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
    return_dummy = dummy = ListNode()
    carry = 0
    while l1 or l2:
        total = carry
        if l1: total += l1.val
        if l2: total += l2.val
        remainder = total % 10
        dummy.next = ListNode(val=remainder)
        dummy = dummy.next
        carry = total//10
        if l1: l1 = l1.next
        if l2: l2 = l2.next
    
    if carry: dummy.next = ListNode(val=carry)
    return return_dummy.next

$Time = O((max(N,M))$

$Space = O(1)$