2020-2-15
- Do not take anyone else’s word about what is right and wrong.
不要人云亦云。
題目:
給定兩個用鏈表表示的整數,每個節點包含一個數位。
這些數位是反向存放的,也就是個位排在鏈表首部。
編寫函數對這兩個整數求和,並用鏈表形式返回結果。
示例:
輸入:(7 -> 1 -> 6) + (5 -> 9 -> 2),即617 + 295
輸出:2 -> 1 -> 9,即912
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/sum-lists-lcci
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。
個人解答:(C版本)
- 就是對應爲相加,然後將結果保存在動態生成的空間,注意的是進位問題。
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
int carryFlag = 0;
int sum = 0;
int oneFlag = 1;
struct ListNode* l = NULL;
struct ListNode* q = NULL;
struct ListNode* p = NULL;
while((NULL != l1) || (NULL != l2))
{
p = (struct ListNode*)malloc(sizeof(struct ListNode));
if(1 == oneFlag)
{
l = p;
q = p;
oneFlag = 0;
}
else
{
q->next = p;
q = q->next;
}
if(NULL == l1)
{
sum = l2->val + carryFlag;
l2 = l2->next;
}
else if(NULL == l2)
{
sum = l1->val + carryFlag;
l1 = l1->next;
}
else
{
sum = l1->val + l2->val + carryFlag;
l1 = l1->next;
l2 = l2->next;
}
if(sum >= 10)
{
carryFlag = 1;
sum -= 10;
}
else
{
carryFlag = 0;
}
q->val = sum;
}
if(1 == carryFlag)
{
q->next = (struct ListNode*)malloc(sizeof(struct ListNode));
q = q->next;
q->val = 1;
q->next = NULL;
}
else
{
q->next = NULL;
}
return l;
}
- 結果:
他山之石: