fork download
  1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6. template <typename T>
  7. struct Element
  8. {
  9. T value;
  10. Element *next;
  11.  
  12. Element(T v, Element *n) : value(v), next(n) {}
  13. };
  14.  
  15. template <typename T>
  16. void insert(Element<T> *&rp, T v, int (*eq)(T, T))
  17. {
  18. if (rp != NULL)
  19. {
  20. if (eq(rp->value, v) >= 0)
  21. {
  22. rp = new Element<T>(v, rp);
  23. }
  24. else
  25. {
  26. insert(rp->next, v, eq);
  27. }
  28. }
  29. else
  30. {
  31. rp = new Element<T>(v, NULL);
  32. }
  33. }
  34.  
  35. template <typename T>
  36. void remove(Element<T> *&rp, T v, int (*eq)(T, T))
  37. {
  38. if (rp != NULL)
  39. {
  40. if (eq(rp->value, v) == 0)
  41. { // v
  42. Element<T> *tmp = rp;
  43. rp = rp->next;
  44. delete tmp;
  45. remove(rp, v, eq);
  46. }
  47. else
  48. {
  49. remove(rp->next, v, eq);
  50. }
  51. }
  52. }
  53.  
  54. template <typename T>
  55. void print(Element<T> *p)
  56. {
  57. while (p)
  58. {
  59. cout << p->value << " ";
  60. p = p->next;
  61. }
  62. cout << endl;
  63. }
  64.  
  65. template <typename T>
  66. int equal(T a, T b)
  67. {
  68. if (a < b)
  69. return -1;
  70. if (a > b)
  71. return 1;
  72. return 0;
  73. }
  74.  
  75. int main()
  76. {
  77. int (*eq)(int, int) = equal;
  78. Element<int> *head = NULL;
  79. insert(head, 2, eq);
  80. insert(head, 5, eq);
  81. insert(head, 1, eq);
  82. print(head);
  83. remove(head, 2, eq);
  84. print(head);
  85. }
  86.  
Success #stdin #stdout 0s 3428KB
stdin
Standard input is empty
stdout
1 2 5 
1 5