Leetcode - 。2 2つの数値を追加します

難易度:穏健派

タイトル

次の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

おすすめ

転載: www.cnblogs.com/52fhy/p/11031865.html