題目:
給出兩個 非空 的連結串列用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。
如果,我們將這兩個數相加起來,則會返回一個新的連結串列來表示它們的和。
您可以假設除了數字 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 協議》,轉載必須註明作者和本文連結