fork download
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4.  
  5. struct Product
  6. {
  7. string name;
  8. int id;
  9. double price;
  10.  
  11. Product * next;
  12. };
  13.  
  14. Product *head = NULL;
  15.  
  16. void addNode(string name, int id, double price)
  17. {
  18. Product **node = &head;
  19.  
  20. while ((*node) && ((*node)->name < name)) {
  21. node = &((*node)->next);
  22. }
  23.  
  24. Product *newNode = new Product;
  25. newNode->name = name;
  26. newNode->id = id;
  27. newNode->price = price;
  28. newNode->next = *node;
  29.  
  30. *node = newNode;
  31. }
  32.  
  33. bool removeNode(int nID)
  34. {
  35. Product *node = head, *prev = NULL;
  36.  
  37. while (node)
  38. {
  39. if (node->id == nID)
  40. {
  41. if (prev) prev->next = node->next;
  42. if (node == head) head = node->next;
  43. delete node;
  44. return true;
  45. }
  46.  
  47. prev = node;
  48. node = node->next;
  49. }
  50.  
  51. return false;
  52. }
  53.  
  54. bool changeName(int nID, string newName)
  55. {
  56. Product *node = head, *prev = NULL;
  57.  
  58. while (node)
  59. {
  60. if (node->id == nID)
  61. {
  62. if (prev) prev->next = node->next;
  63. if (node == head) head = node->next;
  64.  
  65. Product **node2 = &head;
  66. while ((*node2) && ((*node2)->name < newName)) {
  67. node2 = &((*node2)->next);
  68. }
  69.  
  70. node->name = newName;
  71. node->next = *node2;
  72. *node2 = node;
  73.  
  74. return true;
  75. }
  76.  
  77. prev = node;
  78. node = node->next;
  79. }
  80.  
  81. return false;
  82. }
  83.  
  84. void printList()
  85. {
  86. Product *node = head;
  87. while (node)
  88. {
  89. cout << node->id << ": " << node->name << " = " << node->price << endl;
  90. node = node->next;
  91. }
  92. }
  93.  
  94. int main()
  95. {
  96. addNode("Orange", 1, 1.50);
  97. addNode("Apple", 2, 1.00);
  98. addNode("Pineapple", 3, 2.75);
  99.  
  100. printList();
  101.  
  102. changeName(3, "Kiwi");
  103. cout << endl;
  104.  
  105. printList();
  106.  
  107. return 0;
  108. }
Success #stdin #stdout 0s 4280KB
stdin
Standard input is empty
stdout
2: Apple = 1
1: Orange = 1.5
3: Pineapple = 2.75

2: Apple = 1
3: Kiwi = 2.75
1: Orange = 1.5