blob: 99128d0af659b34aded904e2dc1b5a7f508e1a04 (
plain) (
blame)
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
|
#include <iostream>
template <typename T>
struct Node {
T value;
Node<T>* next;
Node(T value, Node<T>* next = nullptr) : value(value), next(next) {}
};
bool makeTotal(Node<int>* head) {
int len = 0;
for (Node<int>* i = head; i != nullptr; i = i->next)
len++;
if (len < 3) return false;
Node<int>* prev = head;
Node<int>* next = head->next->next;
head = head->next;
bool balanced = true;
while (next != nullptr) {
if (prev->value + next->value != head->value) {
balanced = false;
break;
}
prev = prev->next;
head = head->next;
next = next->next;
}
if (!balanced) {
prev->next = next;
delete head;
makeTotal(prev);
}
return balanced;
}
int main() {
// Node<int>* list = new Node<int>(1, new Node<int>(-4, new Node<int>(-5, new Node<int>(-1, new Node<int>(4)))));
Node<int>* list = new Node<int>(10, new Node<int>(-5, new Node<int>(-5, new Node<int>(-15, new Node<int>(2)))));
std::cout << makeTotal(list) << std::endl;
for (Node<int>* i = list; i != nullptr; i = i->next)
std::cout << i->value << " ";
std::cout << std::endl;
Node<int>* tmp = nullptr;
while (list != nullptr) {
tmp = list->next;
delete list;
list = tmp;
}
}
|