File tree Expand file tree Collapse file tree 4 files changed +165
-0
lines changed Expand file tree Collapse file tree 4 files changed +165
-0
lines changed Original file line number Diff line number Diff line change
1
+ /*
2
+ Time: 40:43
3
+ Space: O(N)
4
+ Time: O(N)
5
+
6
+ ローカル変数のアドレスを使ったりしてバグらせて仕切り直した結果時間がかかりすぎた。
7
+ リストの先頭から合算していたリストを作成し、最終的にそれを返す。
8
+ 繰り上がりを考慮する必要がある。
9
+ 繰り上がりが最後まで残ったときの処理を忘れておりそれを最後に追加。
10
+ l1かl2のどちらかを書き換える手段も会ったが、引数を書き換えるのはよくない + コードが無駄に複雑になりそうなのでやめた。
11
+ */
12
+ class Solution {
13
+ public:
14
+ ListNode* addTwoNumbers (ListNode* l1, ListNode* l2) {
15
+ ListNode sentinel_node = ListNode ();
16
+ ListNode* sum_node = &sentinel_node;
17
+ ListNode* left = l1;
18
+ ListNode* right = l2;
19
+ bool carry = false ;
20
+ while (left || right) {
21
+ int sum = 0 ;
22
+ if (left) {
23
+ sum += left->val ;
24
+ left = left->next ;
25
+ }
26
+ if (right) {
27
+ sum += right->val ;
28
+ right = right->next ;
29
+ }
30
+ if (carry) {
31
+ sum++;
32
+ }
33
+ if (sum >= 10 ) {
34
+ carry = true ;
35
+ sum %= 10 ;
36
+ } else {
37
+ carry = false ;
38
+ }
39
+
40
+ ListNode* next_sum_node = new ListNode (sum);
41
+ sum_node->next = next_sum_node;
42
+ sum_node = next_sum_node;
43
+ }
44
+ if (carry) {
45
+ ListNode* last = new ListNode (1 );
46
+ sum_node->next = last;
47
+ }
48
+ return sentinel_node.next ;
49
+ }
50
+ };
Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ public:
3
+ ListNode* addTwoNumbers (ListNode* l1, ListNode* l2) {
4
+ ListNode sentinel_node = ListNode ();
5
+ ListNode* sum_node = &sentinel_node;
6
+ ListNode* left = l1;
7
+ ListNode* right = l2;
8
+ bool carry = false ;
9
+ while (left || right) {
10
+ int sum = 0 ;
11
+ if (left) {
12
+ sum += left->val ;
13
+ left = left->next ;
14
+ }
15
+ if (right) {
16
+ sum += right->val ;
17
+ right = right->next ;
18
+ }
19
+ if (carry) {
20
+ sum++;
21
+ carry = false ;
22
+ }
23
+ if (sum >= 10 ) {
24
+ carry = true ;
25
+ sum -= 10 ;
26
+ }
27
+ sum_node->next = new ListNode (sum);
28
+ sum_node = sum_node->next ;
29
+ }
30
+ if (carry) {
31
+ sum_node->next = new ListNode (1 );
32
+ }
33
+ return sentinel_node.next ;
34
+ }
35
+ };
Original file line number Diff line number Diff line change
1
+ /*
2
+ first_nodeをそのままreturnする実装。
3
+ ノードの数値としてありえない-1で、初回処理を判定。
4
+ */
5
+ class Solution {
6
+ public:
7
+ ListNode* addTwoNumbers (ListNode* l1, ListNode* l2) {
8
+ ListNode* first_node = new ListNode (-1 );
9
+ ListNode* sum_node = first_node;
10
+ ListNode* left = l1;
11
+ ListNode* right = l2;
12
+ bool carry = false ;
13
+ while (left || right) {
14
+ int sum = 0 ;
15
+ if (left) {
16
+ sum += left->val ;
17
+ left = left->next ;
18
+ }
19
+ if (right) {
20
+ sum += right->val ;
21
+ right = right->next ;
22
+ }
23
+ if (carry) {
24
+ sum++;
25
+ carry = false ;
26
+ }
27
+ if (sum >= 10 ) {
28
+ carry = true ;
29
+ sum -= 10 ;
30
+ }
31
+ if (sum_node->val == -1 ) {
32
+ sum_node->val = sum;
33
+ } else {
34
+ sum_node->next = new ListNode (sum);
35
+ sum_node = sum_node->next ;
36
+ }
37
+ }
38
+ if (carry) {
39
+ sum_node->next = new ListNode (1 );
40
+ }
41
+ return first_node;
42
+ }
43
+ };
Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ public:
3
+ ListNode* addTwoNumbers (ListNode* l1, ListNode* l2) {
4
+ ListNode sentinel_node = ListNode ();
5
+ ListNode* sum_node = &sentinel_node;
6
+ ListNode* left = l1;
7
+ ListNode* right = l2;
8
+ bool carry =false ;
9
+ while (left || right) {
10
+ int sum = 0 ;
11
+ if (left) {
12
+ sum += left->val ;
13
+ left = left->next ;
14
+ }
15
+ if (right) {
16
+ sum += right->val ;
17
+ right = right->next ;
18
+ }
19
+ if (carry) {
20
+ sum++;
21
+ carry = false ;
22
+ }
23
+ if (sum>=10 ) {
24
+ sum -= 10 ;
25
+ carry = true ;
26
+ }
27
+ ListNode* next_sum_node = new ListNode (sum);
28
+ sum_node->next = next_sum_node;
29
+ sum_node = sum_node->next ;
30
+ }
31
+ if (carry) {
32
+ ListNode* last_sum_node = new ListNode (1 );
33
+ sum_node->next = last_sum_node;
34
+ }
35
+ return sentinel_node.next ;
36
+ }
37
+ };
You can’t perform that action at this time.
0 commit comments