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 842Â
Output:Â
Resultant list: 1->4->0->5 // represents number 1405Â
Explanation: 563 + 842 = 1405
Input:Â
List1: 7->5->9->4->6 // represents number 75946
List2: 8->4 // represents number 84
Output:Â
Resultant list: 7->6->0->3->0// represents number 76030
Explanation: 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
class Node:
def __init__( self , data):
self .data = data
self . next = None
class LinkedList:
def __init__( self ):
self .head = None
def push( self , new_data):
new_node = Node(new_data)
new_node. next = self .head
self .head = new_node
def addTwoLists( self , first, second):
prev = None
temp = None
carry = 0
while (first is not None or
second is not None ):
fdata = 0 if first is None else first.data
sdata = 0 if second is None else second.data
Sum = carry + fdata + sdata
carry = 1 if Sum > = 10 else 0
Sum = Sum if Sum < 10 else Sum % 10
temp = Node( Sum )
if self .head is None :
self .head = temp
else :
prev. next = temp
prev = temp
if first is not None :
first = first. next
if second is not None :
second = second. next
if carry > 0 :
temp. next = Node(carry)
def printList( self ):
temp = self .head
while (temp):
print temp.data,
temp = temp. next
first = LinkedList()
second = LinkedList()
first.push( 6 )
first.push( 4 )
first.push( 9 )
first.push( 5 )
first.push( 7 )
print "First List is " ,
first.printList()
second.push( 4 )
second.push( 8 )
print "
Second List is ",
second.printList()
res = LinkedList()
res.addTwoLists(first.head, second.head)
print "
Resultant list is ",
res.printList()
|
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!
Last Updated :
18 May, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...