#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;
while (node)
{
if (node->id == nID)
{
double price = node->price;
removeNode(nID);
addNode(newName, nID, price);
return true;
}
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+bmV4dDsKICAgIH0KCiAgICByZXR1cm4gZmFsc2U7Cn0KCmJvb2wgY2hhbmdlTmFtZShpbnQgbklELCBzdHJpbmcgbmV3TmFtZSkKewogICAgUHJvZHVjdCAqbm9kZSA9IGhlYWQ7CgogICAgd2hpbGUgKG5vZGUpCiAgICB7CiAgICAgICAgaWYgKG5vZGUtPmlkID09IG5JRCkKICAgICAgICB7CiAgICAgICAgICAgIGRvdWJsZSBwcmljZSA9IG5vZGUtPnByaWNlOwogICAgICAgICAgICByZW1vdmVOb2RlKG5JRCk7CiAgICAgICAgICAgIGFkZE5vZGUobmV3TmFtZSwgbklELCBwcmljZSk7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KCiAgICAgICAgbm9kZSA9IG5vZGUtPm5leHQ7CiAgICB9CgogICAgcmV0dXJuIGZhbHNlOwp9Cgp2b2lkIHByaW50TGlzdCgpCnsKCVByb2R1Y3QgKm5vZGUgPSBoZWFkOwoJd2hpbGUgKG5vZGUpCgl7CgkJY291dCA8PAlub2RlLT5pZCA8PCAiOiAiIDw8IG5vZGUtPm5hbWUgPDwgIiA9ICIgPDwgbm9kZS0+cHJpY2UgPDwgZW5kbDsKCQlub2RlID0gbm9kZS0+bmV4dDsKCX0KfQoKaW50IG1haW4oKQp7CglhZGROb2RlKCJPcmFuZ2UiLCAxLCAxLjUwKTsKCWFkZE5vZGUoIkFwcGxlIiwgMiwgMS4wMCk7CglhZGROb2RlKCJQaW5lYXBwbGUiLCAzLCAyLjc1KTsKCQoJcHJpbnRMaXN0KCk7CgoJY2hhbmdlTmFtZSgzLCAiS2l3aSIpOwoJY291dCA8PCBlbmRsOwoKCXByaW50TGlzdCgpOwoKCXJldHVybiAwOwp9