leetcode-2数加算

1913 ワード

タイトル:
2つの非負の整数を表すために、2つの非空のチェーンテーブルが与えられる.ここで、それぞれのビット数は逆順序で格納され、各ノードには1桁の数字しか格納されません.
この2つの数を加算すると、新しいチェーンテーブルが返され、合計が表示されます.
数値0以外の2つの数は0で始まると仮定できます.
例:
入力:(2->4->3)+(5->6->4)出力:7->0->8理由:342+465=807
解析
  • は、現在のノードを、リストを返すダミーノードに初期化する.
  • は、キャリーキャリーを0に初期化する.
  • ppおよびqqは、それぞれリストl 1 l 1およびl 2 l 2のヘッダに初期化される.
  • リストl 1 l 1およびl 2 l 2は、それらの末端に到達するまでxxをノードppの値に設定する.ppがl 1 l 1の末尾に達した場合、その値は0に設定される.yyをノードqqの値に設定します.qqがl 2 l 2の末尾に達した場合、その値は0に設定される.sum=x+y+carrysum=x+y+carryを設定します.キャリー値を更新します.carry=sum/10 carry=sum/10です.(sumbmod 10)(summod 10)という数値の新しいノードを作成し、現在のノードの次のノードに設定し、現在のノードを次のノードに進みます.同時に、ppとqqを次のノードに進みます.
  • carry=1 carry=1が成立しているかどうかをチェックし、成立している場合は、戻りリストに数字1を含む新しいノードを追加します.
  • は、ダミーノードの次のノードを返す.

  • コード#コード#
    /**
     * 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 *p1, *p2;
    	    ListNode *head = NULL;
    	    ListNode *p3 =NULL;
    	    int x, y;
    	    int temp;
    	    int last = 0;
    	    p1 = l1;
    	    p2 = l2;
    	    while (p1 != NULL || p2 != NULL){
    		    x = p1 != NULL ? p1->val : 0;
    		    y = p2 != NULL ? p2->val : 0;
    		    temp = x + y+last;
                last = temp/10;
                temp = temp %10;
                
                if(head == NULL){
                    head = new ListNode(temp);###            ,    
                    p3 = head;
                    
                }
    		    else{
    			    p3->next = new ListNode(temp);##       p3=head
                    p3 = p3->next;
    		    }
    		    p1 = p1 != NULL ? p1->next : NULL;
    		    p2 = p2 != NULL ? p2->next : NULL;
    	    }
    
    	    if (last != 0)
    	    {
    		    p3->next = new ListNode(last); #######  
    	    }
    	    return head;
    
        }
    
    };