前言
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.
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-two-numbers
题目
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:
The number of nodes in each linked list is in the range [1, 100].
0 <= Node.val <= 9
It is guaranteed that the list represents a number that does not have leading zeros.
解题
PHP
/**
* 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
*/
function addTwoNumbers($l1, $l2) {
$tail = new ListNode();
$head = $tail;
$carry = 0;
while ($l1 || $l2 || $carry ){
$sum= $l1->val + $l2->val + $carry ;
$carry = $sum> 9 ? 1 : 0;
$tail->next = new ListNode($sum% 10);
$tail = $tail->next;
if($l1) $l1 = $l1->next;
if($l2) $l2 = $l2->next;
};
return $head->next;
}
}
JavaScript
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode} l1
* @param {ListNode} l2
* @return {ListNode}
*/
var addTwoNumbers = function(l1, l2) {
//创建进位
let carry = 0
//创建一个头链表用于保存结果
let tail = new ListNode(0)
//保存头链表的位置用于最后的链表返回
let head = tail
while ( carry || l1 || l2) {
let n1 = l1 !== null ? l1.val : 0
let n2 = l2 !== null ? l2.val : 0
//求和
let sum = n1 + n2 + carry
//如果sum大于9进位则为1
carry = sum > 9 ? 1 : 0
//tail的下一个节点
tail.next = new ListNode(sum % 10)
//tail指向下一个节点
tail = tail.next
//l1指向下一个节点,以便计算第二个节点值
if (l1) l1 = l1.next
//l2指向下一个节点,以便计算第二个节点值
if (l2) l2 = l2.next
}
//head.next中保存的第一个节点是刚开始定义的0
return head.next
};