fork download
  1. #include <iostream>
  2.  
  3. struct slist {
  4. char ch;
  5. slist* next;
  6. };
  7.  
  8. void slist_copy(slist*& lst, const char* str);
  9. void slist_println(std::ostream& _out, const slist* p);
  10. void slist_clear(slist* lst);
  11.  
  12. //удаление символа-fch перед символом-lch
  13. void slist_remove(slist*& lst, char fch, char lch){
  14. slist* p, *a, *t, **rv = &lst;
  15.  
  16. for(p = lst; (p != NULL) && (p->next != NULL); ){
  17.  
  18. if(p->ch == fch){
  19. while((p != NULL) && (p->ch == fch))
  20. p = p->next;
  21.  
  22. if((p != NULL) && (p->ch == lch)){
  23. a = *rv;
  24. if(p == lst)
  25. *rv = lst = lst->next;
  26. else
  27. *rv = p;
  28.  
  29. while(a != p){
  30. t = a;
  31. a = a->next;
  32. delete t;
  33. }
  34. continue;
  35. } else if(p == NULL)
  36. break;
  37. }
  38. rv = &p->next;
  39. p = p->next;
  40. }
  41. }
  42.  
  43.  
  44. int main(void){
  45. slist* lst = NULL;
  46.  
  47. char s[] = "pa (pppa) [papp] <ppppapppppa> ppppppppppppaapa";
  48. slist_copy(lst, s);
  49.  
  50. slist_println(std::cout, lst);
  51. slist_remove(lst, 'p', 'a');
  52. slist_println(std::cout, lst);
  53.  
  54. slist_clear(lst);
  55. return 0;
  56. }
  57.  
  58. //копирование строки в список
  59. void slist_copy(slist*& lst, const char* str){
  60. slist* p, *tail = NULL;
  61. for(lst = NULL; *str; ++str){
  62. p = new (std::nothrow)slist();
  63. if(p == NULL)
  64. break;
  65.  
  66. p->ch = *str;
  67. p->next = NULL;
  68.  
  69. if(lst == NULL)
  70. lst = tail = p;
  71. else {
  72. tail->next = p;
  73. tail = p;
  74. }
  75. }
  76. }
  77.  
  78. //печать
  79. void slist_println(std::ostream& _out, const slist* p){
  80. for(; p != NULL; p = p->next)
  81. _out << p->ch;
  82. _out << std::endl;
  83. }
  84.  
  85. //удаление всех
  86. void slist_clear(slist* lst){
  87. slist* tmp;
  88. while(lst != NULL){
  89. tmp = lst;
  90. lst = lst->next;
  91. delete tmp;
  92. }
  93. }
Success #stdin #stdout 0s 3456KB
stdin
Standard input is empty
stdout
pa (pppa) [papp] <ppppapppppa> ppppppppppppaapa
a (a) [app] <aa> aaa