題目
給你兩個(gè) 非空 的鏈表,表示兩個(gè)非負(fù)的整數(shù)。它們每位數(shù)字都是按照 逆序 的方式存儲(chǔ)的,并且每個(gè)節(jié)點(diǎn)只能存儲(chǔ) 一位 數(shù)字。
請(qǐng)你將兩個(gè)數(shù)相加,并以相同形式返回一個(gè)表示和的鏈表。
你可以假設(shè)除了數(shù)字 0 之外,這兩個(gè)數(shù)都不會(huì)以 0 開頭。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-633378.html
思路
建立鏈表l3,同時(shí)遍歷兩個(gè)鏈表,對(duì)每個(gè)節(jié)點(diǎn)的數(shù)相加,如果一個(gè)鏈表遍歷完,停止遍歷讓它節(jié)點(diǎn)代表的數(shù)置為0,直到兩個(gè)數(shù)都遍歷完。設(shè)置一個(gè)進(jìn)位標(biāo)記,當(dāng)鏈表遍歷結(jié)束但進(jìn)位標(biāo)記不為0,則表示多出一位進(jìn)位,再創(chuàng)立一個(gè)節(jié)點(diǎn)接受進(jìn)位。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-633378.html
代碼
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode *x1=l1,*x2=l2,*l3,*pre,*last;
int sum,carry=0,a,b;
l3=new ListNode(0);
pre=l3;
last=NULL;
while(x1||x2){
if(x1==NULL){
a=0;
}else{
a=x1->val;
}
if(x2==NULL){
b=0;
}else{
b=x2->val;
}
sum=a+b+carry;
carry=sum/10;
if(last!=NULL){
pre=new ListNode(0);
pre->val=sum%10;
last->next=pre;
}else{
pre->val=sum%10;
}
last=pre;
if(x1!=NULL){
x1=x1->next;
}
if(x2!=NULL){
x2=x2->next;
}
}
if(carry>0){
pre=new ListNode(carry);
last->next=pre;
}
return l3;
}
};
到了這里,關(guān)于兩數(shù)相加 LeetCode熱題100的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!