LeetCode 2数加算C++版

1543 ワード

LeetCode両数加算
タイトルの説明: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;

    };
};


  • は、空のチェーンテーブルの場合を考慮する、いずれかのチェーンテーブルが空であり、
  • に直接戻る.
  • は、2つのチェーンテーブルに格納数字が逆順であることを考慮し、出力するチェーンテーブルも逆順であることを考慮するので、直接2つのチェーンテーブル数字を順次取り出して加算し、新しいチェーンテーブル
  • に入れることができる.
  • チェーンテーブル長が一致しない場合を考慮する.
  • 加算を考慮してtempを用いてキャリーの有無を示す.