File tree 2 files changed +102
-88
lines changed
2 files changed +102
-88
lines changed Original file line number Diff line number Diff line change
1
+ #include <stdio.h>
2
+ #include <stdlib.h>
3
+
4
+ struct ListNode {
5
+ int val ;
6
+ struct ListNode * next ;
7
+ };
8
+
9
+ struct ListNode * addTwoNumbers (struct ListNode * l1 , struct ListNode * l2 ) {
10
+ if (l1 == NULL ) return l2 ;
11
+ if (l2 == NULL ) return l1 ;
12
+
13
+ struct ListNode * p1 = l1 , * p2 = l2 ;
14
+ struct ListNode * ans = (struct ListNode * )calloc (1 , sizeof (struct ListNode ));
15
+ struct ListNode * p = ans , * last = NULL , * t = NULL ;
16
+
17
+ int sum = 0 ;
18
+ while (1 ) {
19
+ if (p1 && p2 ) {
20
+ sum += p1 -> val + p2 -> val ;
21
+ p1 = p1 -> next ;
22
+ p2 = p2 -> next ;
23
+ }
24
+ else if (p1 && (p2 == NULL )) {
25
+ sum += p1 -> val ;
26
+ p1 = p1 -> next ;
27
+ }
28
+ else if (p2 && (p1 == NULL )) {
29
+ sum += p2 -> val ;
30
+ p2 = p2 -> next ;
31
+ }
32
+ else {
33
+ break ;
34
+ }
35
+
36
+ p -> val = sum % 10 ;
37
+ sum /= 10 ;
38
+
39
+ /* for next node or the final node */
40
+ p -> next = t = (struct ListNode * )calloc (1 , sizeof (struct ListNode ));
41
+ last = p ;
42
+ p = p -> next ;
43
+ }
44
+
45
+ if (sum != 0 ) {
46
+ t -> val = sum ;
47
+ }
48
+ else {
49
+ /* sum is 0, we don't need a redundant 0, delete it */
50
+ free (t );
51
+ last -> next = NULL ;
52
+ }
53
+
54
+ return ans ;
55
+ }
56
+
57
+ int main () {
58
+ struct ListNode * l1 = (struct ListNode * )calloc (3 , sizeof (struct ListNode ));
59
+ struct ListNode * p1 = l1 ;
60
+ p1 -> val = 2 ;
61
+ p1 -> next = p1 + 1 ;
62
+ p1 ++ ;
63
+
64
+ p1 -> val = 4 ;
65
+ p1 -> next = p1 + 1 ;
66
+ p1 ++ ;
67
+
68
+ p1 -> val = 5 ;
69
+ p1 -> next = NULL ;
70
+
71
+ struct ListNode * l2 = (struct ListNode * )calloc (5 , sizeof (struct ListNode ));
72
+ struct ListNode * p2 = l2 ;
73
+ p2 -> val = 5 ;
74
+ p2 -> next = p2 + 1 ;
75
+ p2 ++ ;
76
+
77
+ p2 -> val = 6 ;
78
+ p2 -> next = p2 + 1 ;
79
+ p2 ++ ;
80
+
81
+ p2 -> val = 4 ;
82
+ p2 -> next = p2 + 1 ;
83
+ p2 ++ ;
84
+
85
+ p2 -> val = 9 ;
86
+ p2 -> next = p2 + 1 ;
87
+ p2 ++ ;
88
+
89
+ p2 -> val = 9 ;
90
+ p2 -> next = NULL ;
91
+
92
+ struct ListNode * p = addTwoNumbers (l1 , l2 );
93
+
94
+ /* 542 + 99465 = 100007 */
95
+ while (p != NULL ) {
96
+ printf ("%d " , p -> val );
97
+ p = p -> next ;
98
+ }
99
+ printf ("\n" );
100
+
101
+ return 0 ;
102
+ }
Load Diff This file was deleted.
You can’t perform that action at this time.
0 commit comments