Medium
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.
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]
Constraints:
[1, 100]
.0 <= Node.val <= 9
use leetcode\com_github_leetcode\ListNode;
/**
* Definition for a singly-linked list.
* class ListNode {
* public $val = 0;
* public $next = null;
* function __construct($val = 0, $next = null) {
* $this->val = $val;
* $this->next = $next;
* }
* }
*/
class Solution {
/**
* @param ListNode $l1
* @param ListNode $l2
* @return ListNode
*/
public function addTwoNumbers($l1, $l2) {
$dummyHead = new ListNode(0);
$p = $l1;
$q = $l2;
$curr = $dummyHead;
$carry = 0;
while ($p !== null || $q !== null) {
$x = ($p !== null) ? $p->val : 0;
$y = ($q !== null) ? $q->val : 0;
$sum = $carry + $x + $y;
$carry = (int)($sum / 10);
$curr->next = new ListNode($sum % 10);
$curr = $curr->next;
if ($p !== null) {
$p = $p->next;
}
if ($q !== null) {
$q = $q->next;
}
}
if ($carry > 0) {
$curr->next = new ListNode($carry);
}
return $dummyHead->next;
}
}