```
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def addTwoNumbers(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
c = 0
r = ListNode(0)
cur = r
while l1 or l2 or c == 1:
if c == 0 and not (l1 and l2):
# if c is 0, and one of the list is run out,
# we can stop here.
cur.next = l1 if l1 else l2
return r.next
v1, v2 = 0, 0
if l1: l1, v1 = l1.next, l1.val
if l2: l2, v2 = l2.next, l2.val
sum = v1 + v2 + c
c = sum / 10
sum = sum % 10
cur.next = ListNode(sum)
cur = cur.next
return r.next
```

It costs more than 100ms to finish, but I don't know how to improve it.

It would be highly appreciated if anyone could give me some advice.

Thank you!