用 PHP 在 力扣 刷演算法 [兩數相加]{一天一更}

666666發表於2020-05-14

題目:

給出兩個 非空 的連結串列用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。

如果,我們將這兩個數相加起來,則會返回一個新的連結串列來表示它們的和。
您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。

示例:
輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
輸出:7 -> 0 -> 8
原因:342 + 465 = 807
作為小白,先要知道資料結構中有一種結構叫連結串列,啥子是連結串列呢,先用口水話說:
資料結構有線性結構和非線性結構,其中線性結構就是有零個或者多個資料元素的 有限序列,怎麼個有序法呢?第一種:把資料元素放到連續的地址儲存單元中;第二種:把帶有標記資料元素放到儲存單元中 這是就連結串列了,終於找到你,還好沒忘記你…
連結串列又分,單向鏈、雙向連結串列、迴圈連結串列。怎麼解釋這三個呢,隨便來個圖,希望我自己能看懂,哈哈…

迴圈連結串列就是這兩種連結串列的尾部指向頭形成環,就像一條蛇咬住自己的尾巴一樣!!!2333

給自己複習了一下,開始正題的表演:

<?php
/*
 * 定義一個單連結串列
 * @param $val int
 * @param $next ptr 
 */
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) {
        // 先初始化一個新節點
        $newList = new ListNode(0);
        // 賦值給用於計算後組成的連結串列的當前節點
        $com = $newList;
        // 定義一個變數儲存 L1 L2對應鏈上的節點值相加時 需要進位的值,初始為 0 
        $result = 0;
        // 迴圈檢查兩個連結串列的是否結束
        while ($l1 != null || $l2 != null) {
            // 當連結串列不存在值時 為 0
            $l1val = $l1 != null ? $l1->val : 0;
            $l2val = $l2 != null ? $l2->val : 0;

            // 相加得到新的值,需要加 上一個相加進位的值 然後大於 10 需要進位,並且取出大於 10 的部分 
            // 取模得到大於 10 的部分
            $sum = $l1val + $l2val + $result;
            $newVal = $sum % 10;
            // 計算需要進位的值 取整除10 的部分
            $result = intval($sum / 10);

            // 新建一個節點
            $newNode = new ListNode($newVal);
            // 向連結串列中新增 指向新增的節點
            $com->next = $newNode;
            // 更新連結串列,讓連結串列的當前節點是 剛剛新增的節點
            $com = $com->next;
            // 判斷並更新 L1連結串列 和 L2 連結串列的操作節點
            if ($l1 != null) {
                $l1 = $l1->next;
            }
            if ($l2 != null) {
                $l2 = $l2->next;
            }
        }
        // 最後還有一個注意點,當進位不等於 0 的時候 還需要向連結串列中增加一個節點
        if ($result > 0) {
            $com->next = new ListNode($result);
        }
        // 返回
        return $newList->next;

    }
}

好了, 今天的就到這兒。下次繼續記錄

本作品採用《CC 協議》,轉載必須註明作者和本文連結

join_jiang

相關文章