#include <iostream>
#include <string>
using namespace std;
struct Product
{
string name;
int id;
double price;
Product * next;
};
Product *head = NULL;
void addNode(string name, int id, double price)
{
Product **node = &head;
while ((*node) && ((*node)->name < name)) {
node = &((*node)->next);
}
Product *newNode = new Product;
newNode->name = name;
newNode->id = id;
newNode->price = price;
newNode->next = *node;
*node = newNode;
}
bool removeNode(int nID)
{
Product *node = head, *prev = NULL;
while (node)
{
if (node->id == nID)
{
if (prev) prev->next = node->next;
if (node == head) head = node->next;
delete node;
return true;
}
prev = node;
node = node->next;
}
return false;
}
bool changeName(int nID, string newName)
{
Product *node = head, *prev = NULL;
while (node)
{
if (node->id == nID)
{
double price = node->price;
if (prev) prev->next = node->next;
if (node == head) head = node->next;
delete node;
addNode(newName, nID, price);
return true;
}
prev = node;
node = node->next;
}
return false;
}
void printList()
{
Product *node = head;
while (node)
{
cout << node->id << ": " << node->name << " = " << node->price << endl;
node = node->next;
}
}
int main()
{
addNode("Orange", 1, 1.50);
addNode("Apple", 2, 1.00);
addNode("Pineapple", 3, 2.75);
printList();
changeName(3, "Kiwi");
cout << endl;
printList();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IFByb2R1Y3QKewogICAgc3RyaW5nIG5hbWU7CiAgICBpbnQgaWQ7CiAgICBkb3VibGUgcHJpY2U7CgkKICAgIFByb2R1Y3QgKiBuZXh0Owp9OwoKUHJvZHVjdCAqaGVhZCA9IE5VTEw7Cgp2b2lkIGFkZE5vZGUoc3RyaW5nIG5hbWUsIGludCBpZCwgZG91YmxlIHByaWNlKQp7CglQcm9kdWN0ICoqbm9kZSA9ICZoZWFkOwoJCiAgICB3aGlsZSAoKCpub2RlKSAmJiAoKCpub2RlKS0+bmFtZSA8IG5hbWUpKSB7CiAgICAgICAgbm9kZSA9ICYoKCpub2RlKS0+bmV4dCk7CiAgICB9CgoJUHJvZHVjdCAqbmV3Tm9kZSA9IG5ldyBQcm9kdWN0OwogICAgbmV3Tm9kZS0+bmFtZSA9IG5hbWU7CiAgICBuZXdOb2RlLT5pZCA9IGlkOwogICAgbmV3Tm9kZS0+cHJpY2UgPSBwcmljZTsKICAgIG5ld05vZGUtPm5leHQgPSAqbm9kZTsKCiAgICAqbm9kZSA9IG5ld05vZGU7Cn0KCmJvb2wgcmVtb3ZlTm9kZShpbnQgbklEKQp7CiAgICBQcm9kdWN0ICpub2RlID0gaGVhZCwgKnByZXYgPSBOVUxMOwoKICAgIHdoaWxlIChub2RlKQogICAgewogICAgICAgIGlmIChub2RlLT5pZCA9PSBuSUQpCiAgICAgICAgewoJCQlpZiAocHJldikgcHJldi0+bmV4dCA9IG5vZGUtPm5leHQ7CgkJCWlmIChub2RlID09IGhlYWQpIGhlYWQgPSBub2RlLT5uZXh0OwogICAgICAgICAgICBkZWxldGUgbm9kZTsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKCQlwcmV2ID0gbm9kZTsKICAgICAgICBub2RlID0gbm9kZS0+bmV4dDsKICAgIH0KCiAgICByZXR1cm4gZmFsc2U7Cn0KCmJvb2wgY2hhbmdlTmFtZShpbnQgbklELCBzdHJpbmcgbmV3TmFtZSkKewogICAgUHJvZHVjdCAqbm9kZSA9IGhlYWQsICpwcmV2ID0gTlVMTDsKCiAgICB3aGlsZSAobm9kZSkKICAgIHsKICAgICAgICBpZiAobm9kZS0+aWQgPT0gbklEKQogICAgICAgIHsKICAgICAgICAgICAgZG91YmxlIHByaWNlID0gbm9kZS0+cHJpY2U7CgogICAgICAgICAgICBpZiAocHJldikgcHJldi0+bmV4dCA9IG5vZGUtPm5leHQ7CiAgICAgICAgICAgIGlmIChub2RlID09IGhlYWQpIGhlYWQgPSBub2RlLT5uZXh0OwogICAgICAgICAgICBkZWxldGUgbm9kZTsKCiAgICAgICAgICAgIGFkZE5vZGUobmV3TmFtZSwgbklELCBwcmljZSk7CgogICAgICAgICAgICByZXR1cm4gdHJ1ZTsgCiAgICAgICAgfQoKICAgICAgICBwcmV2ID0gbm9kZTsKICAgICAgICBub2RlID0gbm9kZS0+bmV4dDsKICAgIH0KCiAgICByZXR1cm4gZmFsc2U7Cn0KCnZvaWQgcHJpbnRMaXN0KCkKewoJUHJvZHVjdCAqbm9kZSA9IGhlYWQ7Cgl3aGlsZSAobm9kZSkKCXsKCQljb3V0IDw8CW5vZGUtPmlkIDw8ICI6ICIgPDwgbm9kZS0+bmFtZSA8PCAiID0gIiA8PCBub2RlLT5wcmljZSA8PCBlbmRsOwoJCW5vZGUgPSBub2RlLT5uZXh0OwoJfQp9CgppbnQgbWFpbigpCnsKCWFkZE5vZGUoIk9yYW5nZSIsIDEsIDEuNTApOwoJYWRkTm9kZSgiQXBwbGUiLCAyLCAxLjAwKTsKCWFkZE5vZGUoIlBpbmVhcHBsZSIsIDMsIDIuNzUpOwoJCglwcmludExpc3QoKTsKCgljaGFuZ2VOYW1lKDMsICJLaXdpIik7Cgljb3V0IDw8IGVuZGw7CgoJcHJpbnRMaXN0KCk7CgoJcmV0dXJuIDA7Cn0=