質問:2つの非負の整数を表すために、2つの空でないリンクリストを指定します。その中で、それぞれの桁は逆の順序で格納され、各ノードは1桁しか格納できません。
これらの2つの数値を合計すると、それらの合計を表す新しいリンクリストが返されます。
番号0を除いて、これらの番号はいずれも0で始まらないと想定できます。
例:
入力:(2-> 4-> 3)+(5-> 6-> 4)
出力:7-> 0-> 8
理由:342 + 465 = 807
ソース:LeetCode
リンク:https:/の
著作権/leetcode-cn.com/problems/add-two-numbersはLeetcode.comが所有しています。商用の再版については、公式の承認に連絡してください。非商用の再版については、出典を示してください。
コード:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
struct ListNode *p,*p1,*p2,*p3,*p4,*ppp,*pppp;
p3=l1;
p4=l2;
int flag=0,i=0,j=0;
while(p3!=NULL){
i++;
p3=p3->next;
}
while(p4!=NULL){
j++;
p4=p4->next;
}
if(i==j||i>j){
p=l1;
p1=ppp=l1;
p2=pppp=l2;
}
if(i<j){
p=l2;
p2=ppp=l2;
p1=pppp=l1;
}
while(ppp!=NULL&&pppp!=NULL){
if((ppp->val+pppp->val+flag)/10>0){
int k=ppp->val;
ppp->val=(ppp->val+pppp->val+flag)%10;
flag=(k+pppp->val+flag)/10;
if(i==j||i>j){
p1=ppp;
p2=pppp;
}
if(i<j){
p2=ppp;
p1=pppp;
}
ppp=ppp->next;
pppp=pppp->next;
}else{
ppp->val=ppp->val+pppp->val+flag;
if(i==j||i>j){
p1=ppp;
p2=pppp;
}
if(i<j){
p2=ppp;
p1=pppp;
}
ppp=ppp->next;
pppp=pppp->next;
flag=0;
}
}
if(ppp!=NULL&&flag!=0){
while(ppp!=NULL){
if((ppp->val+flag)/10){
flag=(ppp->val+flag)/10;
ppp->val=(ppp->val+flag)%10;
if(i==j||i>j){
p1=ppp;
p2=pppp;
}
if(i<j){
p2=ppp;
p1=pppp;
}
ppp=ppp->next;
}else{
ppp->val=ppp->val+flag;
flag=0;
if(i==j||i>j){
p1=ppp;
p2=pppp;
}
if(i<j){
p2=ppp;
p1=pppp;
}
ppp=ppp->next;
}
}
}
if(ppp==NULL&&pppp==NULL&&flag!=0){
struct ListNode* pp = (struct ListNode*)malloc(sizeof(struct ListNode));
pp->val=flag;
pp->next=NULL;
if(i==j||i>j)
p1->next=pp;
if(i<j)
p2->next=pp;
}
return p;
}
エラーがあれば訂正してください、ありがとうございます!!!