1. 程式人生 > >【每日leetcode】兩數相加

【每日leetcode】兩數相加

給定兩個非空連結串列來表示兩個非負整數。位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將兩數相加返回一個新的連結串列。 你可以假設除了數字 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; } };