leetcode-2数加算
タイトル:
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を含む新しいノードを追加します. は、ダミーノードの次のノードを返す.
コード#コード#
2つの非負の整数を表すために、2つの非空のチェーンテーブルが与えられる.ここで、それぞれのビット数は逆順序で格納され、各ノードには1桁の数字しか格納されません.
この2つの数を加算すると、新しいチェーンテーブルが返され、合計が表示されます.
数値0以外の2つの数は0で始まると仮定できます.
例:
入力:(2->4->3)+(5->6->4)出力:7->0->8理由:342+465=807
解析
コード#コード#
/**
* 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;
}
};