philosyang.com

2. Add Two Numbers

 1# Definition for singly-linked list.
 2# class ListNode:
 3#     def __init__(self, val=0, next=None):
 4#         self.val = val
 5#         self.next = next
 6class Solution:
 7    def addTwoNumbers(
 8        self, l1: Optional[ListNode], l2: Optional[ListNode]
 9    ) -> Optional[ListNode]:
10        result = ListNode()
11        node = result
12        carry = 0
13        prev = None
14
15        while l1 and l2:
16            add = l1.val + l2.val + carry
17            if add >= 10:
18                carry = 1
19                add -= 10
20            else:
21                carry = 0
22            node.val = add
23            node.next = ListNode()
24            prev = node
25            node = node.next
26
27            l1 = l1.next
28            l2 = l2.next
29
30        while l1:
31            add = l1.val + carry
32            if add >= 10:
33                carry = 1
34                add -= 10
35            else:
36                carry = 0
37            node.val = add
38            node.next = ListNode()
39            prev = node
40            node = node.next
41
42            l1 = l1.next
43
44        while l2:
45            add = l2.val + carry
46            if add >= 10:
47                carry = 1
48                add -= 10
49            else:
50                carry = 0
51            node.val = add
52            node.next = ListNode()
53            prev = node
54            node = node.next
55
56            l2 = l2.next
57
58        if carry:
59            node.val = 1
60            node.next = None
61        else:
62            prev.next = None
63
64        return result

dummy head helps.

 1# Definition for singly-linked list.
 2# class ListNode:
 3#     def __init__(self, val=0, next=None):
 4#         self.val = val
 5#         self.next = next
 6class Solution:
 7    def addTwoNumbers(
 8        self, l1: Optional[ListNode], l2: Optional[ListNode]
 9    ) -> Optional[ListNode]:
10        dummy_head = ListNode()
11        node = dummy_head
12        carry = 0
13
14        while l1 and l2:
15            add = l1.val + l2.val + carry
16            if add >= 10:
17                carry = 1
18                add -= 10
19            else:
20                carry = 0
21            node.next = ListNode(add)
22            node = node.next
23
24            l1 = l1.next
25            l2 = l2.next
26
27        while l1:
28            add = l1.val + carry
29            if add >= 10:
30                carry = 1
31                add -= 10
32            else:
33                carry = 0
34            node.next = ListNode(add)
35            node = node.next
36
37            l1 = l1.next
38
39        while l2:
40            add = l2.val + carry
41            if add >= 10:
42                carry = 1
43                add -= 10
44            else:
45                carry = 0
46            node.next = ListNode(add)
47            node = node.next
48
49            l2 = l2.next
50
51        if carry:
52            node.next = ListNode(carry)
53
54        return dummy_head.next

#Neetcode150 #Linked-List #Python