You are given two or more non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contains a single digit. Add the numbers and return them as a linked list.

You may assume the numbers do not contain any leading zero, except the number 0 itself.

Example:
789 + 478 = 1267

Input: (9 -> 8 -> 7) + (8 -> 7 -> 4)
Output: 7 -> 6 -> 2 -> 1

```class Node:
def __init__(self, x, nextNode = None):
self.val = x
self.next = nextNode

def printList(l):
value = []
while(l):
value.append(l.val)
l = l.next
print(' - '.join(map(str, value)))

"""
:type lists: List[Node]
:rtype: Node
"""
if not lists:
return None

l3 = Node(0)
p3 = l3
carry = 0

while any(lists) or carry:
total = carry
for l in lists:
if l:
total += l.val
l = l.next

carry = total // 10
p3.next = Node(total % 10)
p3 = p3.next

lists = [l.next if l else None for l in lists]

return l3.next

#789
l1 = Node(9, Node(8, Node(7)))
printList(l1)
#478
l2 = Node(8, Node(7, Node(4)))
printList(l2)
printList(l3)
print()
#342
l1 = Node(2, Node(4, Node(3, Node(5))))
printList(l1)
#26465
l2 = Node(5, Node(6, Node(4, Node(6, Node(2)))))
printList(l2)
#8712
l3 = Node(1, Node(2, Node(7, Node(8))))
printList(l3)
printList(l4)
```

Output:

```9 - 8 - 7
8 - 7 - 4
7 - 6 - 2 - 1

2 - 4 - 3 - 5
5 - 6 - 4 - 6 - 2
1 - 2 - 7 - 8
8 - 2 - 5 - 0 - 4```

Hope it helps.

## 3 thoughts on “Python: Add Two or More Numbers – Linked List”

1. I have updated the code to take more than two linked list.

2. This solution will only work with 3 node list, could it be more generic?

3. This was the shortest, cleanest and easily readable code I have found thus far on this problem. Thanks!

This site uses Akismet to reduce spam. Learn how your comment data is processed.