1. 程式人生 > 其它 >LeetCode--兩數相加

LeetCode--兩數相加

技術標籤:PHP

給你兩個 非空 的連結串列,表示兩個非負的整數。它們每位數字都是按照 逆序 的方式儲存的,並且每個節點只能儲存 一位 數字。
請你將兩個數相加,並以相同形式返回一個表示和的連結串列。
你可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。

示例 1:
輸入:l1 = [2,4,3], l2 = [5,6,4]
輸出:[7,0,8]
解釋:342 + 465 = 807.
示例 2:

輸入:l1 = [0], l2 = [0]
輸出:[0]
示例 3:

輸入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
輸出:[8,9,9,9,0,0,0,1]

提示:
每個連結串列中的節點數在範圍 [1, 100] 內

0 <= Node.val <= 9
題目資料保證列表表示的數字不含前導

答案

/**
 * 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) {
        $value = $l1->val + $l2->val;
        $carray = 0;
        if($value>9){
            $carray = 1;
            $value -= 10;
        }
        $l = $cur = new ListNode($value);

        while ($l1->next && $l2->next){
            $l1 = $l1->next;
            $l2 = $l2->next;


            $val = $l1->val + $l2->val + $carray;
            if($val > 9){
                $carray = 1;
                $val -= 10;
            }else{
                $carray = 0;
            }

            $cur = $cur->next = new ListNode($val);
        }

        while ($l1->next){
            $l1 = $l1->next;
            $value = $l1->val + $carray;
            if($value > 9){
                $carray = 1;
                $value -= 10;
            }else{
                $carray = 0;
            }

            $cur = $cur->next = new ListNode($value);
        }

        while ($l2->next){
            $l2 = $l2->next;
            $value = $l2->val + $carray;
            if($value > 9){
                $carray = 1;
                $value -= 10;
            }else{
                $carray = 0;
            }

            $cur = $cur->next = new ListNode($value);
        }

        if($carray>0){
            $cur->next = new ListNode(1);
        }

        return $l;
    }
}