File tree 1 file changed +55
-0
lines changed
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