LeetCode 2.两数相加

LeetCode 2.两数相加

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例:

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807


知识点:

  • strrev(); // 实现字符串反转
  • str_split(); // 分割字符串
  • % // 取余
  • intval(数/10); // 整除
  • __construct 对象初始化
  • 尾插法

PHP代码:

class ListNode
{
    public $val = 0;
    public $next = null;
    function __construct($val)
    {
        $this->val = $val;
    }
}

// 初始化测试数据
/*
$l1 = new ListNode(2);
$l11 = new ListNode(4);
$l12 = new ListNode(3);
$l1->next = $l11;
$l11->next = $l12;
$l2 = new ListNode(5);
$l21 = new ListNode(6);
$l22 = new ListNode(4);
$l23 = new ListNode(4);
$l2->next = $l21;
$l21->next = $l22;
$l22->next = $l23;
*/

function addTwoNumbers($l1, $l2) {
    $ans = '';
    $mod = 0;

    $array_1 = $array_2 = array();
    while ($l1 -> next != null) {
        array_push($array_1, $l1 -> val);
        $l1 = $l1 -> next;
    }
    array_push($array_1, $l1 -> val);
    while ($l2 -> next != null) {
        array_push($array_2, $l2 -> val);
        $l2 = $l2 -> next;
    }
    array_push($array_2, $l2 -> val);

    for ($i = 0; $i < max(count($array_1), count($array_2)); ++ $i) {
        $now1 = $i >= count($array_1) ? 0: intval($array_1[$i]);
        $now2 = $i >= count($array_2) ? 0: intval($array_2[$i]);
        $mod += $now1 + $now2;
        $ans .= strval($mod % 10);
        $mod = intval($mod / 10);
    }
    if ($mod != 0) {
        $ans .= strval($mod);
    }
    $ansNode = $ansNodeList = new ListNode($ans[0]);
    for ($i = 1; $i < strlen($ans); ++ $i) {
        $tempNode = new ListNode($ans[$i]);
        $ansNode->next = $tempNode;
        $ansNode = $tempNode;
    }
    return $ansNodeList;
}

var_dump(addTwoNumbers($l1, $l2));
原文地址:https://www.cnblogs.com/GetcharZp/p/11756313.html