#   # Programming Languages war Python, PHP, Javascrip (Nodejs) Add Two Numbers

Hey my friends, a new post about this war. I don't know which is better, but I'll try to figure it out. I hope y'all enjoy this series. Here we go!

This is a challenge of leetcode.com I made this challenge with python3, and next I made PHP and Javacript the same way.

Problem:

You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order, and each of their nodes contains a single digit. Add the two numbers and return the sum as a linked list.

You may assume the two numbers do not contain any leading zero, except the number 0 itself.

Example 1:

Input: l1 = [2,4,3], l2 = [5,6,4] Output: [7,0,8] Explanation: 342 + 465 = 807.

### Python

I receive two objects and I have to add, I used "while" to iterate the object and pass to list, it's easier manipulate the number of this way, I reverse the list with the method "reverse()", and turn list to string and then to integer, I add both numbers and reverse again and return the list converted to ListNode Object.

``````# Definition for singly-linked list.
class ListNode:
def __init__(self, x):
self.val = x
self.next = None

class Solution:
al = list()
bl = list()

while l1 or l2:
(al.append(l1.val) if l1 else None)
(bl.append(l2.val) if l2 else None)
l1 = (l1.next if l1 else None)
l2 =(l2.next if l2 else None)

al.reverse()
bl.reverse()
str1 = ''.join(map(str, al))
str2 = ''.join(map(str, bl))
result = int(str1) + int(str2)
result = list(str(result))
result.reverse()
return self.createList(ListNode(0), result, 0)

def createList(self, node, list, pos):
if node.val == 0:
if len(list) > pos:
node.val = list[pos]
self.createList(node, list, pos+1)
else:
if len(list) > pos:
node.next = ListNode(list[pos])
if(len(list) > pos+1):
self.createList(node.next, list, pos+1)
else:
return node
return node

sol = Solution()
a = sol.createList(ListNode(0), [2,4,3], 0)
b = sol.createList(ListNode(0), [5,6,4], 0)

print(solve)
``````

### PHP

I receive two objects and I have to add, I used "while" to iterate the object and to turn to array, it's easier to manipulate the number of this way. I try to use reverse here, that exist a method for that, but when I try to send my solution is not successful in all cases. For example an array with length 31, because when I turn this array in a number return a number like 1E+30, then I can't solve that, but I resolve the challenge the other way. I validate what an array is longer, so, I add but to left to right and validate if the result is gran than 9 and save the number in a new array and return the array converted to ListNode Object.

``````<?php
class ListNode
{
public \$val  = 0;
public \$next = null;
public function __construct(\$val = 0, \$next = null)
{
\$this->val  = \$val;
\$this->next = \$next;
}
}

class Solution
{
{
\$al = array();
\$bl = array();

while (\$l1) {
\$al[] = \$l1->val;
\$l1   = \$l1->next ? \$l1->next : null;
}

while (\$l2) {
\$bl[] = \$l2->val;
\$l2   = \$l2->next ? \$l2->next : null;
}
if (count(\$al) > count(\$bl) || count(\$al) == count(\$bl)) {
\$pending = 0;
for (\$i = 0; \$i < count(\$al); \$i++) {
\$a = \$al[\$i];
\$b = !empty(\$bl[\$i]) ? \$bl[\$i] : 0;
\$r = \$a + \$b + \$pending;
if (\$r > 9) {
\$result[] = (strval(\$r));
\$pending  = (strval(\$r));
} else {
\$result[] = strval(\$r);
\$pending  = 0;
}

}
if(\$pending){
\$result[] = \$pending;
}
} else {
\$pending = 0;
for (\$i = 0; \$i < count(\$bl); \$i++) {
\$a = \$bl[\$i];
\$b = !empty(\$al[\$i]) ? \$al[\$i] : 0;
\$r = \$a + \$b + \$pending;
if (\$r > 9) {
\$result[] = (strval(\$r));
\$pending  = (strval(\$r));
} else {
\$result[] = strval(\$r);
\$pending  = 0;
}

}
if(\$pending){
\$result[] = \$pending;
}
}

return \$this->createList(new ListNode(0), \$result, 0);

}
public function createList(\$node, \$arr, \$pos)
{
if (\$node->val == 0 && \$pos == 0) {

if (count(\$arr) > \$pos) {
\$node->val = \$arr[\$pos];
\$this->createList(\$node, \$arr, \$pos + 1);
}
} else {

if (count(\$arr) > \$pos) {
\$node->next = new ListNode(\$arr[\$pos]);
if (count(\$arr) > \$pos + 1) {
\$this->createList(\$node->next, \$arr, \$pos + 1);
} else {
return \$node;
}

}
}
return \$node;
}
}

\$sol = new Solution();
\$a   = \$sol->createList(new ListNode(0), [2,4,9], 0);
\$b   = \$sol->createList(new ListNode(0), [5,6,4,9], 0);

var_dump(\$solve);

?>
``````

### Javascript

I receive two objects and I have to add, I used "while" to iterate the object and to turn to array, it's easier to manipulate the number of this way, I try to use reverse here, that exist a method for that, but when to try to send my solution is not successful in all cases. For example an array with length 31, because when I turn this array in a number return a number like 1E+30 the same that PHP, then I can't solve that, but I resolve the challenge the other way. I validate what an array is longer, so, I add but to left to right and validate if the result is gran than 9 and save the number in a new array and return the array converted to ListNode Object.

``````class ListNode {
constructor(val = 0, next = null) {
this.val = val === undefined ? 0 : val;
this.next = next === undefined ? null : next;
}
}

class Solution {
let al = [];
let bl = [];

while (l1) {
al.push(l1.val);
l1 = l1.next ? l1.next : null;
}

while (l2) {
bl.push(l2.val);
l2 = l2.next ? l2.next : null;
}
let pending = 0;
let result = [];
if (al.length > bl.length || al.length == bl.length) {
for (let i = 0; i < al.length; i++) {
let a = al[i];
let b = bl[i] ? bl[i] : 0;
let r = a + b + parseInt(pending);
if (r > 9) {
result.push(String(r));
pending = String(r);
} else {
result.push(String(r));
pending = 0;
}
}
if (pending) {
result.push(pending);
}
}
if (al.length < bl.length) {
for (let i = 0; i < bl.length; i++) {
let a = bl[i];
let b = al[i] ? al[i] : 0;
let r = a + b + parseInt(pending);
if (r > 9) {
result.push(String(r));
pending = String(r);
} else {
result.push(String(r));
pending = 0;
}
}
if (pending) {
result.push(pending);
}
}

return this.createList(new ListNode(0), result, 0);
}
createList(node, arr, pos) {
if (node.val == 0 && pos == 0) {
if (arr.length > pos) {
node.val = arr[pos];
this.createList(node, arr, pos + 1);
}
} else {
if (arr.length > pos) {
node.next = new ListNode(arr[pos]);
if (arr.length > pos + 1) {
this.createList(node.next, arr, pos + 1);
} else {
return node;
}
}
}
return node;
}
}

const sol = new Solution();
const a = sol.createList(new ListNode(0), [2, 4, 3], 0);
const b = sol.createList(new ListNode(0), [5, 6, 4], 0);