説明
次の2つの非負の整数を表す2つの非空のリンクリストを与えています。数字は逆の順序で保存され、それらのノードの各々は、単一の数字を含みます。2つの数値を追加し、リンクリストとしてそれを返します。
次の2つの数字が数0自体を除き、任意の先行ゼロを含まない仮定することができます。
例:
入力:(2 - > 4 - > 3)+(5 - > 6 - > 4)
出力:7 - > 0 - > 8
説明:342 + 465 = 807。
アルゴリズム
キャリーを追跡し、ヘッダから始まるビット単位の加算処理をシミュレートするために使用する変数
- 時間の複雑さ:
- 宇宙の複雑さ:
C ++ソリューション
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
// Use variables to track carry
// Simulate the bitwise addition process starting from the header
auto p = l1, q = l2, dummy = new ListNode(-1);
auto curr = dummy;
int t = 0;
while (p || q || t) {
int sum = t;
if (p) {sum += p->val; p = p->next;}
if (q) {sum += q->val; q = q->next;}
curr->next = new ListNode(sum % 10);
curr = curr->next;
t = sum / 10;
}
curr->next = NULL; // Actually constructor defined it
return dummy->next;
}
};