#include <bits/stdc++.h>
using
namespace
std;
struct
Node {
int
val;
Node* next;
Node(
int
x)
: val(x), next(nullptr)
{
}
};
int
closest_tribonacci(
int
num)
{
vector<
int
> tribonacci = { 0, 1, 1 };
while
(tribonacci.back() < num) {
int
next_trib = tribonacci[tribonacci.size() - 1]
+ tribonacci[tribonacci.size() - 2]
+ tribonacci[tribonacci.size() - 3];
tribonacci.push_back(next_trib);
}
int
min_diff =
abs
(num - tribonacci[0]);
int
closest_trib = tribonacci[0];
for
(
int
i = 1; i < tribonacci.size(); i++) {
int
diff =
abs
(num - tribonacci[i]);
if
(diff < min_diff) {
min_diff = diff;
closest_trib = tribonacci[i];
}
}
return
closest_trib;
}
Node* replaceWithClosestTribonacci(Node* head)
{
Node* curr = head;
while
(curr != nullptr) {
int
closest_trib = closest_tribonacci(curr->val);
curr->val = closest_trib;
curr = curr->next;
}
return
head;
}
void
printList(Node* head)
{
Node* curr = head;
while
(curr != nullptr) {
cout << curr->val <<
"->"
;
curr = curr->next;
}
cout <<
"null"
<< endl;
}
int
main()
{
Node* head =
new
Node(2);
head->next =
new
Node(8);
head->next->next =
new
Node(14);
head->next->next->next =
new
Node(5);
head->next->next->next->next =
new
Node(16);
replaceWithClosestTribonacci(head);
printList(head);
return
0;
}