話不多說,先貼代碼。
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
int k;ListNode *l3;ListNode l4(0);
l3=&l4;
while(l1||l2){
if(l1==nullptr) {l1=new ListNode(0);}
else if(l2==nullptr) {l2=new ListNode(0);}
if(l1->val+l2->val>9){
k=(l1->val+l2->val)-10;l3->next=new ListNode(k);
if(l1->next) l1->next->val++;
else if(l2->next) l2->next->val++;
else {l3=l3->next;l3->next=new ListNode(1);break;}
}
else{k=l1->val+l2->val;l3->next=new ListNode(k);}
l1=l1->next;l2=l2->next;l3=l3->next;
}
l3=&l4;l3=l3->next;
return l3;
}
感覺和別人對比起來,我洗的其實算是比較麻煩的代碼,應該說是按照原始的數字加法法則應用出來的一個算法,主要在k值判斷上,有算法用的是%10的方法,而我是減10進位。算法時間複雜度應該是O(m+n)