難易度:穏健派
タイトル
次の2つの非負の整数を表す2つの非空のリンクのリストを与えています。数字は逆の順序で保存され、それらのノードの各々は、単一の数字を含みます。2つの数値を追加し、リンクリストとしてそれを返します。
次の2つの数字が数0自体を除き、任意の先行ゼロを含まない仮定することができます。
2つの与えられた 非空
二つの非負の整数を表すためにリンクされたリストを。これらの中で、それぞれの中央値に応じた 逆序
方法で格納され、それらは各ノードが一つだけ桁を格納することができます。
我々はこれらの2つの数値を合計した場合、それは新しいリストを返しますし、それらを表現します。
あなたは数字0に加えて、これらの二つの数字が0で始まっていないと仮定することができます。
例:
入力:(2 -> 4 -> 3) + (5 -> 6 -> 4)
出力:7 -> 0 -> 8
理由:342 + 465 = 807
PHP
被験者は、2つのリンクされたリストを追加することに相当し、新しいリストに対応するノードの各ノードのリンクリスト格納された値は、キャリーに関する。
/**
* Definition for a singly-linked list.
* class ListNode {
* public $val = 0;
* public $next = null;
* function __construct($val) { $this->val = $val; }
* }
*/
class Solution {
/**
* @param ListNode $l1
* @param ListNode $l2
* @return ListNode
*/
function addTwoNumbers($l1, $l2) {
$add_flag = 0;
$result_list = null;
do {
$val = $l1->val + $l2->val + $add_flag;
if ($val >= 10) {
$add_flag = 1;
$val -= 10; //减去,因为进位了
} else {
$add_flag = 0;
}
$tmp_list = new ListNode($val);
if (is_null($result_list)){
$result_list = $tmp_list;
} else{
$current_node = $result_list;
while ($current_node->next !== null) {
$current_node = $current_node->next;
}
$current_node->next = $tmp_list;
// $next->next = $tmp_list; //?
}
// $next = $tmp_list; //?
$l1 = $l1->next;
$l2 = $l2->next;
} while ($l1 || $l2 || $add_flag);
return $result_list;
}
}
結果:
構造体のリストをプリントアウトするためにPHP:
ListNode Object
(
[val] => 2
[next] => ListNode Object
(
[val] => 4
[next] => ListNode Object
(
[val] => 1
[next] => ListNode Object
(
[val] => 1
[next] =>
)
)
)
)
新しいノードを結ぶ注意を直接使用することはできません。
$result_list->next = $tmp_list;
このような割り当て、その後、$result_list
リストは最終的に2つのノードだけ:ノードとエンドノード、カバーされ始めて中間ノード。
ソース
リンクします。https://leetcode-cn.com/problems/add-two-numbers/
参照
1、使用のPHPリスト-シンプルブック
https://www.jianshu.com/p/e409ec512caa