#include <iostream>
using namespace std;
struct node {
int data;
node* prev;
node* next;
};
node* find(int,node*&);
void afterElement(int,int,node*&,node*&,node* (*find)(int, node*&));
int main() {
node* head = NULL;
node* tail = NULL;
// The program itself has a menu that allows for input of value in list but
// for the sake of relevancy and shortness of code I dropped it out from here
int x, y;
cout << "Insert 2 values: value you wish to insert, and value you wish to insert it after. ";
cin >> x;
cin >> y;
afterElement(x,y,head,tail,find); // here is the error "overloaded function..."
return 0;
}
node* find(int x,node*& head) {
node* curr = head;
while ((curr != NULL) && (curr->data != x))
curr = curr->next;
return curr;
}
void afterElement(int x,int after,node*& head,node*& tail,node* (*find)(int x, node*& head)) {
node* N;
node* compared = (*find)(after,head);
N->data = x;
if (compared == NULL)
cout << "There is no element " << after << " in the list!\n";
else {
if (compared->next == NULL) {
compared->next = N;
N->prev = compared;
N->next = NULL;
tail = N;
} else {
compared->next->prev = N;
N->next = compared->next;
compared->next = N;
N->prev = compared;
}
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IG5vZGUgewppbnQgZGF0YTsKbm9kZSogcHJldjsKbm9kZSogbmV4dDsKfTsKCm5vZGUqIGZpbmQoaW50LG5vZGUqJik7CnZvaWQgYWZ0ZXJFbGVtZW50KGludCxpbnQsbm9kZSomLG5vZGUqJixub2RlKiAoKmZpbmQpKGludCwgbm9kZSomKSk7CgppbnQgbWFpbigpIHsKICAgIG5vZGUqIGhlYWQgPSBOVUxMOwogICAgbm9kZSogdGFpbCA9IE5VTEw7CiAgICAvLyBUaGUgcHJvZ3JhbSBpdHNlbGYgaGFzIGEgbWVudSB0aGF0IGFsbG93cyBmb3IgaW5wdXQgb2YgdmFsdWUgaW4gbGlzdCBidXQKICAgIC8vIGZvciB0aGUgc2FrZSBvZiByZWxldmFuY3kgYW5kIHNob3J0bmVzcyBvZiBjb2RlIEkgZHJvcHBlZCBpdCBvdXQgZnJvbSBoZXJlCgogICAgaW50IHgsIHk7CiAgICBjb3V0IDw8ICJJbnNlcnQgMiB2YWx1ZXM6IHZhbHVlIHlvdSB3aXNoIHRvIGluc2VydCwgYW5kIHZhbHVlIHlvdSB3aXNoIHRvIGluc2VydCBpdCBhZnRlci4gIjsKICAgIGNpbiA+PiB4OwogICAgY2luID4+IHk7CiAgICBhZnRlckVsZW1lbnQoeCx5LGhlYWQsdGFpbCxmaW5kKTsgLy8gaGVyZSBpcyB0aGUgZXJyb3IgIm92ZXJsb2FkZWQgZnVuY3Rpb24uLi4iCiAgICByZXR1cm4gMDsKfQoKbm9kZSogZmluZChpbnQgeCxub2RlKiYgaGVhZCkgewogICAgbm9kZSogY3VyciA9IGhlYWQ7CiAgICB3aGlsZSAoKGN1cnIgIT0gTlVMTCkgJiYgKGN1cnItPmRhdGEgIT0geCkpCiAgICAgICAgY3VyciA9IGN1cnItPm5leHQ7CiAgICByZXR1cm4gY3VycjsKfQoKdm9pZCBhZnRlckVsZW1lbnQoaW50IHgsaW50IGFmdGVyLG5vZGUqJiBoZWFkLG5vZGUqJiB0YWlsLG5vZGUqICgqZmluZCkoaW50IHgsIG5vZGUqJiBoZWFkKSkgewpub2RlKiBOOwpub2RlKiBjb21wYXJlZCA9ICgqZmluZCkoYWZ0ZXIsaGVhZCk7Ck4tPmRhdGEgPSB4OwppZiAoY29tcGFyZWQgPT0gTlVMTCkKICAgIGNvdXQgPDwgIlRoZXJlIGlzIG5vIGVsZW1lbnQgIiA8PCBhZnRlciA8PCAiIGluIHRoZSBsaXN0IVxuIjsKZWxzZSB7CiAgICBpZiAoY29tcGFyZWQtPm5leHQgPT0gTlVMTCkgewogICAgICAgIGNvbXBhcmVkLT5uZXh0ID0gTjsKICAgICAgICBOLT5wcmV2ID0gY29tcGFyZWQ7CiAgICAgICAgTi0+bmV4dCA9IE5VTEw7CiAgICAgICAgdGFpbCA9IE47CiAgICB9IGVsc2UgewogICAgICAgIGNvbXBhcmVkLT5uZXh0LT5wcmV2ID0gTjsKICAgICAgICBOLT5uZXh0ID0gY29tcGFyZWQtPm5leHQ7CiAgICAgICAgY29tcGFyZWQtPm5leHQgPSBOOwogICAgICAgIE4tPnByZXYgPSBjb21wYXJlZDsKICAgIH0KfQp9Cgo=