LeetCode第二題:兩樹相加(C語言)
阿新 • • 發佈:2018-12-17
給定兩個非空連結串列來表示兩個非負整數。位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將兩數相加返回一個新的連結串列。
你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。
示例:
輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 輸出:7 -> 0 -> 8 原因:342 + 465 = 807
對於這道題,正常情況下都可以考慮到,但會出現一些特殊情況:
- 輸入:(1 ) + (9 -> 9 -> 9) 輸出:0 -> 0 -> 0 -> 1
- 輸入:(2 -> 4 ) + (8 ->5) 輸出:0 -> 0 -> 1
程式碼變數含義:
- flag:進位標誌位;兩數相加大於10 flag = 1;否則flag= 0;
- l3:指向新連結串列的某個結點
- cur:指向新連結串列的頭結點
//生成結點 struct ListNode *CreateNode(int val) { struct ListNode *node = (struct ListNode *)malloc(sizeof(struct ListNode)); node->val = val; node->next = NULL; return node; } struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) { int flag = 0; struct ListNode* cur = NULL; struct ListNode* l3 = NULL; while (l1 || l2) { int x = l1 ? l1->val : 0; int y = l2 ? l2->val : 0; int sum = x + y + flag; flag = sum / 10; struct ListNode* node = CreateNode(sum % 10); if (l3) {l3->next = node; l3 = l3->next;} else {l3 = node; cur = node;} if (l1) l1 = l1->next; if (l2) l2 = l2->next; } //下面就是考慮到了上述的特殊情況 if (flag == 1) { struct ListNode* node = CreateNode(1); l3->next = node; } return cur; }