# Python Program To Add Two Numbers Represented By Linked Lists- Set 1

Given two numbers represented by two lists, write a function that returns the sum list. The sum list is a list representation of the addition of two input numbers.

**Example**:

Input:

List1: 5->6->3 // represents number 563

List2: 8->4->2 // represents number 842Output:

Resultant list: 1->4->0->5 // represents number 1405Explanation:563 + 842 = 1405Input:

List1: 7->5->9->4->6 // represents number 75946

List2: 8->4 // represents number 84Output:

Resultant list: 7->6->0->3->0// represents number 76030Explanation:75946+84=76030

**Approach**: Traverse both lists and One by one pick nodes of both lists and add the values. If the sum is more than 10 then make carry as 1 and reduce sum. If one list has more elements than the other then consider the remaining values of this list as 0.

**The steps are:**

- Traverse the two linked lists from start to end
- Add the two digits each from respective linked lists.
- If one of the lists has reached the end then take 0 as its digit.
- Continue it until both the end of the lists.
- If the sum of two digits is greater than 9 then set carry as 1 and the current digit as
*sum % 10*

Below is the implementation of this approach.

## Python

`# Python program to add two numbers ` `# represented by linked list` ` ` `# Node class` `class` `Node:` ` ` ` ` `# Constructor to initialize the ` ` ` `# node object` ` ` `def` `__init__(` `self` `, data):` ` ` `self` `.data ` `=` `data` ` ` `self` `.` `next` `=` `None` ` ` ` ` `class` `LinkedList:` ` ` ` ` `# Function to initialize head` ` ` `def` `__init__(` `self` `):` ` ` `self` `.head ` `=` `None` ` ` ` ` `# Function to insert a new node at ` ` ` `# the beginning` ` ` `def` `push(` `self` `, new_data):` ` ` `new_node ` `=` `Node(new_data)` ` ` `new_node.` `next` `=` `self` `.head` ` ` `self` `.head ` `=` `new_node` ` ` ` ` `# Add contents of two linked lists and ` ` ` `# return the head node of resultant list` ` ` `def` `addTwoLists(` `self` `, first, second):` ` ` `prev ` `=` `None` ` ` `temp ` `=` `None` ` ` `carry ` `=` `0` ` ` ` ` `# While both list exists` ` ` `while` `(first ` `is` `not` `None` `or` ` ` `second ` `is` `not` `None` `):` ` ` ` ` `# Calculate the value of next digit ` ` ` `# in resultant list` ` ` `# The next digit is sum of following ` ` ` `# things` ` ` `# (i) Carry` ` ` `# (ii) Next digit of first list (if ` ` ` `# there is a next digit)` ` ` `# (iii) Next digit of second list (if ` ` ` `# there is a next digit)` ` ` `fdata ` `=` `0` `if` `first ` `is` `None` `else` `first.data` ` ` `sdata ` `=` `0` `if` `second ` `is` `None` `else` `second.data` ` ` `Sum` `=` `carry ` `+` `fdata ` `+` `sdata` ` ` ` ` `# Update carry for next calculation` ` ` `carry ` `=` `1` `if` `Sum` `>` `=` `10` `else` `0` ` ` ` ` `# Update sum if it is greater than 10` ` ` `Sum` `=` `Sum` `if` `Sum` `< ` `10` `else` `Sum` `%` `10` ` ` ` ` `# Create a new node with sum as data` ` ` `temp ` `=` `Node(` `Sum` `)` ` ` ` ` `# if this is the first node then set ` ` ` `# it as head of resultant list` ` ` `if` `self` `.head ` `is` `None` `:` ` ` `self` `.head ` `=` `temp` ` ` `else` `:` ` ` `prev.` `next` `=` `temp` ` ` ` ` `# Set prev for next insertion` ` ` `prev ` `=` `temp` ` ` ` ` `# Move first and second pointers to ` ` ` `# next nodes` ` ` `if` `first ` `is` `not` `None` `:` ` ` `first ` `=` `first.` `next` ` ` `if` `second ` `is` `not` `None` `:` ` ` `second ` `=` `second.` `next` ` ` ` ` `if` `carry > ` `0` `:` ` ` `temp.` `next` `=` `Node(carry)` ` ` ` ` `# Utility function to print the ` ` ` `# linked LinkedList` ` ` `def` `printList(` `self` `):` ` ` `temp ` `=` `self` `.head` ` ` `while` `(temp):` ` ` `print` `temp.data,` ` ` `temp ` `=` `temp.` `next` ` ` ` ` `# Driver code` `first ` `=` `LinkedList()` `second ` `=` `LinkedList()` ` ` `# Create first list` `first.push(` `6` `)` `first.push(` `4` `)` `first.push(` `9` `)` `first.push(` `5` `)` `first.push(` `7` `)` `print` `"First List is "` `,` `first.printList()` ` ` `# Create second list` `second.push(` `4` `)` `second.push(` `8` `)` `print` `"` `Second ` `List` `is` `",` `second.printList()` ` ` `# Add the two lists and see result` `res ` `=` `LinkedList()` `res.addTwoLists(first.head, second.head)` `print` `"` `Resultant ` `list` `is` `",` `res.printList()` `# This code is contributed by Nikhil Kumar Singh(nickzuck_007)` |

**Output:**

First List is 7 5 9 4 6 Second List is 8 4 Resultant list is 5 0 0 5 6

**Complexity Analysis:**

**Time Complexity:**O(m + n), where m and n are numbers of nodes in first and second lists respectively.

The lists need to be traversed only once.**Space Complexity:**O(m + n).

A temporary linked list is needed to store the output number

Related Article: Add two numbers represented by linked lists | Set 2

Please refer complete article on Add two numbers represented by linked lists | Set 1 for more details!