@@ -13,98 +13,157 @@ struct listNode {
13
13
typedef listNode * intLinkedList;
14
14
15
15
void printInteger (intLinkedList integer);
16
- intLinkedList intToList ( int num );
16
+ void addDigit (intLinkedList& integer, char charDigit );
17
17
intLinkedList sumIntLists (intLinkedList integer1, intLinkedList integer2);
18
18
void removeLinkedList (intLinkedList &head);
19
19
20
20
int main ()
21
21
{
22
- int num1 = 78 ;
23
- int num2 = 14 ;
24
- intLinkedList integer1 = intToList (num1);
25
- intLinkedList integer2 = intToList (num2);
26
- intLinkedList sum = sumIntLists (integer1, integer2);
22
+ char charDigit = 0 ;
23
+ intLinkedList integer1 = nullptr ;
27
24
28
- cout << " \n Integer one: " ;
25
+ cout << " Type in a number:\n " ;
26
+ charDigit = cin.get ();
27
+
28
+ while (charDigit != 10 )
29
+ {
30
+ addDigit (integer1, charDigit);
31
+ charDigit = cin.get ();
32
+ }
33
+ cout << " \n The number is:\n " ;
29
34
printInteger (integer1);
30
- cout << " \n Integer two: " ;
35
+
36
+
37
+
38
+ intLinkedList integer2 = nullptr ;
39
+ charDigit = 0 ;
40
+ cout << " \n Type in another number:\n " ;
41
+
42
+ charDigit = cin.get ();
43
+ while (charDigit != 10 )
44
+ {
45
+ addDigit (integer2, charDigit);
46
+ charDigit = cin.get ();
47
+ }
48
+
49
+ cout << " \n The number is:\n " ;
31
50
printInteger (integer2);
32
- cout << " \n Their sum is: " ;
33
- printInteger (sum);
51
+
52
+ intLinkedList sumInteger = sumIntLists (integer1, integer2);
53
+
54
+ cout << " \n The sum of the numbers is:\n " ;
55
+ printInteger (sumInteger);
34
56
35
57
removeLinkedList (integer1);
36
58
removeLinkedList (integer2);
37
- removeLinkedList (sum );
59
+ removeLinkedList (sumInteger );
38
60
39
61
cin.get ();
40
62
return 0 ;
41
63
42
64
}
43
65
44
- // Exercise 4.9
45
- intLinkedList intToList ( int num )
66
+
67
+ void addDigit (intLinkedList& integer, char charDigit )
46
68
{
47
- if (num < 0 )
69
+
70
+ if (charDigit < ' 0' || charDigit > ' 9' )
48
71
{
49
- num = 0 ;
72
+ cout << " Wrong character" << endl;
73
+ return ;
50
74
}
75
+ int digit = charDigit - ' 0' ;
51
76
52
- intLinkedList head = nullptr ;
77
+ listNode * newNode = new listNode;
78
+ newNode->num = digit;
79
+ newNode->next = integer;
80
+ integer = newNode;
81
+ }
53
82
54
- do {
55
- listNode * newNode = new listNode;
56
- newNode->num = num % 10 ;
57
- num /= 10 ;
58
- newNode->next = head;
59
- head = newNode;
60
- } while (num);
61
83
62
- return head;
84
+ void printInteger (intLinkedList integer)
85
+ {
86
+ listNode * loopPtr = integer;
87
+ if (loopPtr != nullptr )
88
+ {
89
+ printInteger (loopPtr->next );
90
+ cout << loopPtr->num ;
91
+ }
63
92
}
64
93
65
94
66
95
// Exercise 4.10
67
96
intLinkedList sumIntLists (intLinkedList integer1, intLinkedList integer2)
68
97
{
69
- int num1 = 0 ;
70
- int num2 = 0 ;
71
- int sum = 0 ;
98
+ intLinkedList head;
72
99
100
+ int digit1 = 0 ;
101
+ int digit2 = 0 ;
102
+ int sumDigit = 0 ;
73
103
74
- listNode * loopPtr = integer1;
75
- while (loopPtr != nullptr )
76
- {
77
- num1 *= 10 ;
78
- num1 += loopPtr->num ;
79
- loopPtr = loopPtr->next ;
80
- }
81
104
82
- loopPtr = integer2;
83
- while (loopPtr != nullptr )
84
- {
85
- num2 *= 10 ;
86
- num2 += loopPtr->num ;
87
- loopPtr = loopPtr->next ;
88
- }
105
+ int extraVal = 0 ;
89
106
90
- sum = num1 + num2;
107
+ listNode * loopPtr1 = integer1;
108
+ listNode * loopPtr2 = integer2;
91
109
92
- return intToList (sum) ;
93
- }
110
+ listNode * loopPtrSum = new listNode ;
111
+ head = loopPtrSum;
94
112
95
113
96
- void printInteger (intLinkedList integer)
97
- {
98
- listNode * loopPtr = integer;
99
- while (loopPtr != nullptr )
114
+ while (loopPtr1 != nullptr || loopPtr2 != nullptr )
100
115
{
101
- cout << loopPtr->num ;
102
- loopPtr = loopPtr->next ;
116
+ if (loopPtr1 != nullptr )
117
+ {
118
+ digit1 = loopPtr1->num ;
119
+ loopPtr1 = loopPtr1->next ;
120
+ }
121
+
122
+ if (loopPtr2 != nullptr )
123
+ {
124
+ digit2 = loopPtr2->num ;
125
+ loopPtr2 = loopPtr2->next ;
126
+ }
127
+
128
+ sumDigit = digit1 + digit2 + extraVal;
129
+ if (sumDigit >= 10 )
130
+ {
131
+ extraVal = 1 ;
132
+ sumDigit = sumDigit - 10 ;
133
+ }
134
+ else
135
+ {
136
+ extraVal = 0 ;
137
+ }
138
+
139
+ loopPtrSum->num = sumDigit;
140
+
141
+ digit1 = digit2 = 0 ;
142
+
143
+ // Check if next digit exists
144
+ if (loopPtr1 != nullptr || loopPtr2 != nullptr || extraVal)
145
+ {
146
+ loopPtrSum->next = new listNode;
147
+ }
148
+ else
149
+ {
150
+ loopPtrSum->next = nullptr ;
151
+ }
152
+ loopPtrSum = loopPtrSum->next ;
103
153
}
154
+
155
+ if (extraVal)
156
+ {
157
+ loopPtrSum->num = 1 ;
158
+ loopPtrSum->next = nullptr ;
159
+ }
160
+ return head;
104
161
}
105
162
163
+
106
164
void removeLinkedList (intLinkedList &head)
107
165
{
166
+
108
167
listNode * loopPtr = head;
109
168
listNode * deleteNode;
110
169
@@ -120,3 +179,4 @@ void removeLinkedList(intLinkedList &head)
120
179
121
180
122
181
182
+
0 commit comments