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));