【Leetcode一刷】2.兩數相加
阿新 • • 發佈:2018-12-20
難度:中等
題目: 給定兩個非空連結串列來表示兩個非負整數。位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將兩數相加返回一個新的連結串列。 你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。
示例: 輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 輸出:7 -> 0 -> 8 原因:342 + 465 = 807
解答:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
struct ListNode *l3 = (struct ListNode *)malloc(sizeof(struct ListNode));
l3->val = 0;
l3->next = NULL;
struct ListNode *head = (struct ListNode *)malloc(sizeof(struct ListNode));
head->next = l3;
while (l1!=NULL || l2!=NULL){
//printf("%d ", l1->val);
//printf("%d \n", l2->val);
if (l1 == NULL){
l1 = (struct ListNode *)malloc(sizeof(struct ListNode));
l1->val = 0;
l1->next = NULL;
}
if (l2 == NULL){
l2 = (struct ListNode *)malloc(sizeof(struct ListNode));
l2->val = 0;
l2->next = NULL;
}
l3->val += l1->val+l2->val;
if (l1->next!=NULL || l2->next!=NULL || l3->val>=10){
l3->next = (struct ListNode *)malloc(sizeof(struct ListNode));
l3->next->val = 0;
l3->next->next = NULL;
}
if (l3->val>=10){
l3->next->val += 1;
}
l3->val = l3->val%10;
l1 = l1->next;
l2 = l2->next;
l3 = l3->next;
}
l3 = head->next;
return l3;
}
結果
討論
這題弱雞如我de了很久的bug,特別是兩個數各自到了盡頭的情況。一直處理不清楚的一個點就是是否要為申請下一位的空間,好在最後總算搞定了,不枉我寫到兩點鐘嗚嗚嗚。