fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. struct Node {
  5. int key;
  6. Node* next;
  7. };
  8.  
  9. Node* add_to_list(Node *end, int first, int last){
  10. for (int i=first; i<=last; i++){
  11. Node *tmp = new Node();
  12. tmp->key = i;
  13. tmp->next = nullptr;
  14. end->next = tmp;
  15. end = tmp;
  16. }
  17. return end;
  18. }
  19.  
  20. void print_available(Node *start){
  21. cout << "Available keys: " << start->key;
  22. while (start = start->next){
  23. cout << ", " << start->key;
  24. }
  25. cout << endl;
  26. }
  27.  
  28. Node* delete_by_key(Node *start, int key){
  29. if (start->key == key){
  30. Node *tmp = start;
  31. start = start->next;
  32. delete tmp;
  33. return delete_by_key(start, key);
  34. }
  35. Node *cur = start;
  36. while (cur){
  37. if (cur->next != nullptr && cur->next->key == key){
  38. Node *tmp = cur->next;
  39. cur->next = cur->next->next;
  40. delete tmp;
  41. }
  42. cur = cur->next;
  43. }
  44. return start;
  45. }
  46.  
  47. int main() {
  48. Node *start = new Node();
  49. start->key = 1;
  50. start->next = nullptr;
  51.  
  52. Node* end = add_to_list(start, 2, 5);
  53. end = add_to_list(end, 1, 5);
  54.  
  55. cout << "Start" << endl;
  56. print_available(start);
  57. start = delete_by_key(start, 1);
  58. print_available(start);
  59.  
  60. cout << "Middle" << endl;
  61. print_available(start);
  62. start = delete_by_key(start, 3);
  63. print_available(start);
  64.  
  65. cout << "End" << endl;
  66. print_available(start);
  67. start = delete_by_key(start, 5);
  68. print_available(start);
  69.  
  70. return 0;
  71. }
Success #stdin #stdout 0s 3468KB
stdin
Standard input is empty
stdout
Start
Available keys: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5
Available keys: 2, 3, 4, 5, 2, 3, 4, 5
Middle
Available keys: 2, 3, 4, 5, 2, 3, 4, 5
Available keys: 2, 4, 5, 2, 4, 5
End
Available keys: 2, 4, 5, 2, 4, 5
Available keys: 2, 4, 2, 4