【LeetCode】Add Two Numbers(兩數相加)
阿新 • • 發佈:2018-11-17
handle bae gif return one cast select inline 產生
這道題是LeetCode裏的第2到題。
這道題的條件判斷很簡單,如下:
1.是否為尾節點
2.是否產生進位
3.是否等於9
4.是否需要拓展空間
代碼如下:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { ListNode *p = l1, *q = l2; int add, carry = 0;//carry標誌進位 while (1) { add = p->val + q->val + carry; p->val = add % 10; if (add > 9)carry = 1; else carry = 0; if (p->next == NULL || q->next == NULL)break;//直到最後一個節點 p = p->next; q = q->next; } //這裏就相當於是一個鏈表只有一個節點,另一個鏈表加上這個一個節點的數值 if (p->next) {//list1 p = p->next; q = p; while (carry) {//是否需要進位 if (q->val == 9) {//是否等於9 if (q->next == NULL) {//是否是最後一個節點 q->val = 0; q->next = (ListNode*)malloc(sizeof(ListNode)); q->next->val = 1; q->next->next = NULL; break; } q->val = 0; q = q->next;} else {q->val++;carry = 0;} } return l1; } if (q->next) {//list2 q = q->next; list2 = q;// while (carry) { if (q->val == 9) { if (q->next == NULL) { q->val = 0; q->next = (ListNode*)malloc(sizeof(ListNode)); q->next->val = 1; q->next->next = NULL; break; } q->val = 0; q = q->next;} else {q->val++;carry = 0;} } p->next = l2; return l1; } if (carry) { q = (ListNode*)malloc(sizeof(ListNode)); q->next = NULL; q->val = 1; p->next = q; } return l1; }
運行結果
個人總結:在設計算法初期,造成了許多代碼的累贅,以上代碼是經過優化後得到的。但是在這裏兩個if條件中還是會有代碼的重復,但能夠做出來我就已經很開心了。(^-^)V
【LeetCode】Add Two Numbers(兩數相加)