【每日leetcode】兩數相加
阿新 • • 發佈:2018-12-10
給定兩個非空連結串列來表示兩個非負整數。位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將兩數相加返回一個新的連結串列。 你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。 示例: 輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 輸出:7 -> 0 -> 8 原因:342 + 465 = 807
語言:c++ 思路:從低到高,按位相加。需要考慮進位情況,其中某個連結串列為空,連結串列不一樣長等情況。
/**
* 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* l3=new ListNode(0);//創一個頭結點為0的指標
ListNode* tmp=l3;
int j=0;
int number;
while(l1!=NULL||l2!=NULL)
{
int x=(l1!=NULL)?l1->val:0;
int y=(l2!=NULL)?l2->val:0 ;
number=x+y+j;
j=number/10;//更新下一個進位
tmp->next=new ListNode(number%10);
tmp=tmp->next;
if(l1!=NULL)
l1=l1->next;
if(l2!=NULL)
l2=l2->next;
}
if (j > 0) {
tmp->next = new ListNode(j);//判斷是否還有進位
}
return l3->next;
}
};