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.
Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready. To complete your preparation from learning a language to DS Algo and many more, please refer Complete Interview Preparation Course.
List1: 5->6->3 // represents number 563
List2: 8->4->2 // represents number 842
Resultant list: 1->4->0->5 // represents number 1405
Explanation: 563 + 842 = 1405
List1: 7->5->9->4->6 // represents number 75946
List2: 8->4 // represents number 84
Resultant list: 7->6->0->3->0// represents number 76030
Approach: Traverse both lists from end 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.Reverse the final list to get the sum.
The steps are:
- Traverse the two linked lists from end to start.
- 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 % 10Reverse the resultant list to obtain the actual sum.
Below is the implementation of this approach.
First List is 7 5 9 4 6 Second List is 8 4 Resultant list is 5 0 0 5 6
- 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
Method 2(Using STL): Using stack data structure
- Create 3 stacks namely s1,s2,s3.
- Fill s1 with Nodes of list1 and fill s2 with nodes of list2.
- Fill s3 by creating new nodes and setting the data of new nodes to the sum of s1.top(), s2.top() and carry until list1 and list2 are empty .
- If the sum >9
- set carry 1
- set carry 0
- Create a Node(say prev) that will contain the head of the sum List.
- Link all the elements of s3 from top to bottom
- return prev
First List : 9 -> 5 -> 0 Second List : 6 -> 7 Sum List : 1 -> 0 -> 1 -> 7
Another Approach with time complexity O(N):
The given approach works as following steps:
- First, we calculate sizes of both the linked lists, size1 and size2, respectively.
- Then we traverse the bigger linked list, if any, and decrement till size of both become same.
- Now we traverse both linked lists till end.
- Now the backtracking occurs while performing addition.
- Finally, the head node is returned of the linked list containing the answer.
First List : 5 -> 6 -> 3 Second List : 8 -> 4 -> 2 Sum List : 1 -> 4 -> 0 -> 5
Related Article: Add two numbers represented by linked lists | Set 2
Please write comments if you find the above codes/algorithms incorrect, or find other ways to solve the same problem.