0%

2. Add Two Numbers

2. Add Two Numbers

第一次
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
class Solution
{
public:
ListNode *addTwoNumbers(ListNode *l1, ListNode *l2)
{
ListNode *result = new ListNode();
ListNode *point = result;
unsigned int c = 0;
do
{
int sum;
try
{
if (l1 != 0 && l2 != 0)
{
sum = l1->val + l2->val + c;
l1 = l1->next;
l2 = l2->next;
throw "case 1";
}
else if (l1 != 0 && l2 == 0)
{
sum = l1->val + c;
l1 = l1->next;
throw "case 2";
}
else if (l1 == 0 && l2 != 0)
{
sum = l2->val + c;
l2 = l2->next;
throw "case 3";
}
else
{
sum = 0;
}
}
catch (...)
{
point->val = sum % 10;
c = sum / 10;
if (l1 != 0 || l2 != 0)
{
point->next = new ListNode();
point = point->next;
}
else
{
if (c != 0)
{
point->next = new ListNode(c);
}
}
}
} while (l1 != 0 || l2 != 0);

return result;
}
};

第一次结果

第二次
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
class Solution
{
public:
ListNode *addTwoNumbers(ListNode *l1, ListNode *l2)
{
ListNode *result = new ListNode();
ListNode *point = result;
unsigned int c = 0;
do
{
int sum;

if (l1 != 0 && l2 != 0)
{
sum = l1->val + l2->val + c;
l1 = l1->next;
l2 = l2->next;
}
else if (l1 != 0 && l2 == 0)
{
sum = l1->val + c;
l1 = l1->next;
}
else if (l1 == 0 && l2 != 0)
{
sum = l2->val + c;
l2 = l2->next;
}
else
{
sum = 0 + c;
}

point->val = sum % 10;
c = sum / 10;
if (l1 != 0 || l2 != 0 || c != 0)
{
point->next = new ListNode();
point = point->next;
}

} while (l1 != 0 || l2 != 0 || c != 0);

return result;
}
};

复习
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
auto pseudoL1 = l1;
auto pseudoL2 = l2;
int l1Length = 0;
int l2Length = 0;
while(pseudoL1)
{
++l1Length;
pseudoL1 = pseudoL1->next;
}
while(pseudoL2)
{
++l2Length;
pseudoL2 = pseudoL2->next;
}

if(l1Length > l2Length)
swap(l1, l2);
auto ret = l2;
auto pre = l2;
int c = 0;
while(l1)
{
auto sum = l2->val + l1->val + c;
c = sum / 10;
l2->val = sum % 10;
pre = l2;
l1 = l1->next;
l2 = l2->next;
}
while(c)
{
if(!l2)
{
pre->next = new ListNode(c);
break;
}
else
{
auto sum = l2->val + c;
l2->val = sum % 10;
c = sum / 10;
pre = l2;
l2 = l2->next;
}
}
return ret;
}
};
1621148746599.png
solution
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode* ret = new ListNode();
auto ans = ret;
int c = 0;
while(l1 || l2)
{
int sum = c;
if(l1)
{
sum += l1->val;
l1 = l1->next;
}
if(l2)
{
sum += l2->val;
l2 = l2->next;
}
ret->next = new ListNode(sum % 10);
ret = ret->next;
c = sum / 10;
}
if(c)
ret->next = new ListNode(c);
return ans->next;
}
};