leetcode 兩數相加
阿新 • • 發佈:2018-12-15
給定兩個非空連結串列來表示兩個非負整數。位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將兩數相加返回一個新的連結串列。
你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。
示例:
輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 輸出:7 -> 0 -> 8 原因:342 + 465 = 807
/** * 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 *head = (ListNode*)malloc(sizeof(ListNode)); ListNode *t,*h; head->next = NULL; h = head; //指向頭結點 int carry = 0; //進位標記 head->val = l1->val + l2->val; if(head->val >= 10){ carry = 1; head->val -= 10; } h = head; if(l1!=NULL) l1 = l1->next; if(l2!=NULL) l2 = l2->next; while(l1!=NULL || l2!=NULL){ t = (ListNode*)malloc(sizeof(ListNode)); if(l1!=NULL && l2!=NULL){ t->val = l1->val + l2->val; } else if(l1 == NULL){ t->val = l2->val; } else if(l2 == NULL){ t->val = l1->val; } t->next = NULL; if(carry==1){ carry = 0; t->val++; } if(t->val>=10){ carry = 1; t->val -= 10; } h->next = t; h = h->next; if(l1!=NULL) l1 = l1->next; if(l2!=NULL) l2 = l2->next; } //考慮進位,如果有進位的話還要加一個結點 if(carry == 1){ t = (ListNode*)malloc(sizeof(ListNode)); t->val = carry; t->next = NULL; h->next = t; } return head; } };