LeetCode 2数加算C++版
1543 ワード
LeetCode両数加算
タイトルの説明:2つの非負の整数を表すために2つの非空のチェーンテーブルを与えます.ここで、それぞれのビット数は逆順序で格納され、各ノードには1桁の数字しか格納されません.この2つの数を加算すると、新しいチェーンテーブルが返され、合計が表示されます.数値0以外の2つの数は0で始まると仮定できます.
以下、C++を使用してプログラムを作成し、後で分析します.
C++コードは、空のチェーンテーブルの場合を考慮する、いずれかのチェーンテーブルが空であり、 に直接戻る.は、2つのチェーンテーブルに格納数字が逆順であることを考慮し、出力するチェーンテーブルも逆順であることを考慮するので、直接2つのチェーンテーブル数字を順次取り出して加算し、新しいチェーンテーブル に入れることができる.チェーンテーブル長が一致しない場合を考慮する. 加算を考慮してtempを用いてキャリーの有無を示す.
タイトルの説明:2つの非負の整数を表すために2つの非空のチェーンテーブルを与えます.ここで、それぞれのビット数は逆順序で格納され、各ノードには1桁の数字しか格納されません.この2つの数を加算すると、新しいチェーンテーブルが返され、合計が表示されます.数値0以外の2つの数は0で始まると仮定できます.
以下、C++を使用してプログラムを作成し、後で分析します.
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) {
ListNode* result=NULL;
int sum = ((l1!=NULL)?l1->val:0)+((l2!=NULL)?l2->val:0);
int temp=sum/10;
result=new ListNode(sum%10);
ListNode *l=result;
l1=l1!=NULL?l1->next:NULL;
l2=l2!=NULL?l2->next:NULL;
while(l1!=NULL||l2!=NULL){
int num = ((l1!=NULL)?l1->val:0)+((l2!=NULL)?l2->val:0)+temp;
temp=num/10;
ListNode *ltemp=new ListNode(num%10);
l->next=ltemp;
l=ltemp;
l1=l1!=NULL?l1->next:NULL;
l2=l2!=NULL?l2->next:NULL;
}
if (temp == 1) {//
ListNode *ltemp=new ListNode(temp);
l->next=ltemp;
l=ltemp;
}
return result;
};
};