LeetCode-02兩數相加
阿新 • • 發佈:2018-12-03
/** * 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 preHead(0), *p = &preHead; int extra = 0; while (l1 || l2 || extra) { int sum = (l1 ? l1->val : 0) + (l2 ? l2->val : 0) + extra; extra = sum / 10; p->next = new ListNode(sum % 10); p = p->next; l1 = l1 ? l1->next : l1; l2 = l2 ? l2->next : l2; } return preHead.next; } };
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) { struct ListNode *preHead = (struct ListNode *)malloc(sizeof(struct ListNode)); preHead->val = 0; struct ListNode *p = NULL; int extra = 0; while (l1 || l2 || extra) { if(p == NULL) { p=preHead; } else { p->next=(struct ListNode*)malloc(sizeof(struct ListNode)); //這裡寫成p會出錯 p->next->val=0; p=p->next; } int sum = (l1 ? l1->val : 0) + (l2 ? l2->val : 0) + extra; extra = sum / 10; p->val = sum % 10; p->next=NULL;//不能開始就p=p->next;沒分配記憶體會報錯 l1 = l1 ? l1->next : l1; l2 = l2 ? l2->next : l2; } return preHead; }