Home » leet code » Leet Code : Add Two List – Java | CPP | Javascript | Python

# Leet Code : Add Two List – Java | CPP | Javascript | Python

You are given two non-empty linked lists that each represent a non-negative integer. The digits are kept in reverse order, with each node containing only one digit. Add the two numbers together and return the total as a linked list.

Except for the number 0 itself, you may presume that the two numbers do not have any leading zeros.

Eg 1:

```Input: l1 = [2,4,3], l2 = [5,6,4]
Output: [7,0,8]

Explanation: 342 + 465 = 807.

Example 2:

Input: l1 = [0], l2 = [0]
Output: [0]

Example 3:
Input: l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
Output: [8,9,9,9,0,0,0,1]```

## Solution:

CPP :

``````class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
int carry=0;
while(l1!=NULL || l2!=NULL || carry!=0)
{
int sum=0;
if(l1!=NULL)
{
sum+=l1->val;
l1=l1->next;
}
if(l2!=NULL)
{
sum+=l2->val;
l2=l2->next;
}
sum+=carry;
carry=sum/10;
ListNode* node=new ListNode(sum%10);
// to add the first node in the newly created list (head node)
{
continue;  //forwards the loop for further itreation before moving further
}

// to add the remaining list except the head node
while(temp->next!=NULL)
{
temp=temp->next;
}
temp->next=node;
}
}
};
``````

Java

``````class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
int count = 1;
int carry = 0;
ListNode resultNode = new ListNode();
ListNode nextNode = resultNode;
while(l1 != null || l2 != null || carry != 0) {
int sum = carry;
if(l1 != null){
sum += l1.val;
l1 = l1.next;
}

if(l2 != null) {
sum += l2.val;
l2 = l2.next;
}

if(sum >9) {
carry = 1;
nextNode.val = sum - 10;
} else {
carry = 0;
nextNode.val = sum;
}
if(l1 != null || l2 != null || carry != 0) {
nextNode.next = new ListNode();
nextNode = nextNode.next;
}
}
return resultNode;
}
}``````

Python :

``````class Solution:
def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:

tail=ListNode()

a=list()
b=list()
while(l1!=None):
a.append(l1.val)
l1=l1.next
while(l2!=None):
b.append(l2.val)
l2=l2.next
a.reverse()
b.reverse()
print(a)
print(b)
res=list()
carry=0
if(len(a)>=len(b)):
i=len(a)-1
j=len(b)-1
while(i>=0):
if j >=0:
s=a[i]+b[j]+carry
else:
s=a[i]+carry
if (s<10):
res.append(s)
carry=0
else:
res.append(s%10)
s=s//10
carry=s
i-=1
j-=1
if carry!=0:
res.append(carry)
print(res)

for i in range (0,len(res)):
temp=ListNode()

temp.val=res[i]
# print(temp.val)
temp.next=None

if i==0:
tail=temp
else:
tail.next=temp
tail=temp
print(tail.val)

elif(len(b)>=len(a)):
res=list()
carry=0
i=len(b)-1
j=len(a)-1
while(i>=0):
if j >=0:
s=a[j]+b[i]+carry
else:
s=b[i]+carry
if (s<10):
res.append(s)
carry=0
else:
res.append(s%10)
s=s//10
carry=s
i-=1
j-=1
if carry!=0:
res.append(carry)
print(res)

for i in range (0,len(res)):
temp=ListNode()

temp.val=res[i]
# print(temp.val)
temp.next=None

if i==0:
tail=temp
else:
tail.next=temp
tail=temp
print(tail.val)

Java Script:

``````var addTwoNumbers = function(l1, l2) {
const zeroNode = new ListNode();
let l3 = zeroNode;
let carry = 0;

while (l1 || l2) {
const value1 = l1?.val || 0;
const value2 = l2?.val || 0;
const sum = value1 + value2 + carry;
const value3 = sum % 10;

carry = Math.floor(sum / 10);

l1 = l1 ? l1.next : null;
l2 = l2 ? l2.next : null;
l3.next = new ListNode(value3);
l3 = l3.next;
}

if (carry) {
l3.next = new ListNode(carry);
}

return zeroNode.next;
};``````