File tree Expand file tree Collapse file tree 1 file changed +55
-0
lines changed
Expand file tree Collapse file tree 1 file changed +55
-0
lines changed Original file line number Diff line number Diff line change 1+ /**
2+ * Definition for singly-linked list.
3+ * struct ListNode {
4+ * int val;
5+ * ListNode *next;
6+ * ListNode(int x) : val(x), next(NULL) {}
7+ * };
8+ */
9+ class Solution {
10+ public:
11+ ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
12+
13+ ListNode *result = new ListNode(0); //return listNode
14+ ListNode *p = l1, *q = l2, *r = result; //linkedList pointer
15+ int carry = 0; //計算有沒有進位,有進位要新增一個node
16+ int sum = 0;
17+
18+ while(p != NULL && q != NULL){
19+
20+ // l1==l2
21+ sum = p->val + q->val + carry;
22+ carry = sum / 10;
23+ r->next = new ListNode(sum % 10);
24+ p = p->next; //移動指標
25+ q = q->next;
26+ r = r->next;
27+ }
28+
29+ while(p != NULL || q != NULL || carry){
30+
31+ // l1 !=l2 或者是l1=l2但會進位,例如[5][5]
32+ sum = carry;
33+
34+ if(p != NULL){
35+
36+ // l1 較多
37+ sum = sum + p->val;
38+ p = p->next;
39+ }
40+ if(q != NULL){
41+
42+ // l2 較多
43+ sum = sum + q->val;
44+ q = q->next;
45+ }
46+
47+ carry = sum / 10;
48+ // 會進到while loop,一定需要新增node,所以可以最後做
49+ r->next = new ListNode(sum % 10);
50+ // 記得移動指標
51+ r = r -> next;
52+ }
53+ return result->next;
54+ }
55+ };
You can’t perform that action at this time.
0 commit comments