fork(1) 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 *prev = start;
  36. Node *cur;
  37. while (cur = prev->next){
  38. if (cur->key == key){
  39. prev->next = cur->next;
  40. delete cur;
  41. } else {
  42. prev = cur;
  43. }
  44. }
  45. return start;
  46. }
  47.  
  48. int main() {
  49. Node *start = new Node();
  50. start->key = 1;
  51. start->next = nullptr;
  52.  
  53. Node* end = add_to_list(start, 2, 5);
  54. end = add_to_list(end, 1, 5);
  55.  
  56. cout << "Start" << endl;
  57. print_available(start);
  58. start = delete_by_key(start, 1);
  59. print_available(start);
  60.  
  61. cout << "Middle" << endl;
  62. print_available(start);
  63. start = delete_by_key(start, 3);
  64. print_available(start);
  65.  
  66. cout << "End" << endl;
  67. print_available(start);
  68. start = delete_by_key(start, 5);
  69. print_available(start);
  70.  
  71. return 0;
  72. }
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