Problem of the day
You have been given two singly Linked Lists, where each of them represents a positive number without any leading zeros.
Your task is to add these two numbers and print the summation in the form of a linked list.
Example:If the first linked list is 1 -> 2 -> 3 -> 4 -> 5 -> NULL and the second linked list is 4 -> 5 -> NULL.
The two numbers represented by these two lists are 12345 and 45, respectively. So, adding these two numbers gives 12390.
So, the linked list representation of this number is 1 -> 2 -> 3 -> 9 -> 0 -> NULL.
The first line of input contains an integer 'T' representing the number of test cases.
The first line of each test case contains the elements of the first linked list separated by a single space and terminated by -1. Hence, -1 would never be a list element.
The second line of each test case contains the elements of the second linked list separated by a single space and terminated by -1. Hence, -1 would never be a list element.
Output format:
For each test case, return the head of linked list after summation. The elements of the linked list must be terminated by -1.
Note:
You don't need to print anything, it has already been taken care of. Just implement the given function.
Follow-Up:
Try to solve this problem in linear time complexity and constant space complexity.
1 <= T <= 100
1 <= L <= 5000
0 <= data <= 9 and data != -1
Where 'L' is the number of nodes in either of the two Linked List and 'data' is the element value in a node of the linked list.
Time limit: 1 sec
2
1 1 -1
9 9 9 -1
2 4 -1
5 3 -1
1 0 1 0 -1
7 7 -1
In test case 1, we are adding 11 and 999 to get 1010.
In test case 2, we are adding 24 and 53 to get 77.
2
3 8 1 2 9 -1
9 8 2 9 -1
1 9 0 -1
8 1 0 -1
4 7 9 5 8 -1
1 0 0 0 -1
In test case 1, we are adding 38129 and 9829 to get 47958.
In test case 2, we are adding 190 and 810 to get 1000.
Try using the old-school method of adding two numbers.
We will use the naive method to add two linked lists. While adding two numbers, we always add digits in the right to left manner. So first, we will reverse both linked lists so that we can easily process the number in this manner.
We will be storing the result of the addition in a different linked list. We will start adding the nodes of both linked lists and use another variable ‘carry’ to keep track of the carry generated in each addition.
In the end, if we are left with a ‘carry’ greater than 0, we will just add a new node in our answer linked list.
O(N + M), where ‘N’ and ‘M’ are the numbers of nodes in both linked lists.
Since we will be reversing both linked lists which will take linear time O(N) and O(M) respectively for both the linked list. The addition part will take at most max(N, M) operations. Thus the overall time complexity will be O(N + M).
O(K), where ‘K’ = max('N', ‘M’), ‘N’ and ‘M’ are the number of nodes in both linked lists.
Since we are storing the result of the addition in a new linked list which can grow at most 1 + max(N, M) in size. Thus the space complexity will be O(K).