fork download
  1. #include <iostream>
  2. #include <cstdlib>
  3.  
  4. struct slist {
  5. int val;
  6. slist* next;
  7. };
  8. bool slist_add(slist*& lst, int val);
  9. void slist_clear(slist*& lst);
  10.  
  11. struct triple {
  12. slist* l1, *l2, *l3;
  13. };
  14.  
  15. void slist_triple(slist*& lst, triple* tp, int a, int b){
  16. slist* p = lst, *t1 = NULL, *t2 = NULL, *t3 = NULL;
  17.  
  18. tp->l1 = tp->l2 = tp->l3 = NULL;
  19. for(; p != NULL; p = p->next){
  20. if(p->val < a){
  21. if(tp->l1 == NULL)
  22. tp->l1 = t1 = p;
  23. else {
  24. t1->next = p;
  25. t1 = p;
  26. }
  27. } else if(p->val >= a && p->val <= b){
  28. if(tp->l2 == NULL)
  29. tp->l2 = t2 = p;
  30. else {
  31. t2->next = p;
  32. t2 = p;
  33. }
  34. } else {
  35. if(tp->l3 == NULL)
  36. tp->l3 = t3 = p;
  37. else {
  38. t3->next = p;
  39. t3 = p;
  40. }
  41. }
  42. }
  43. lst = NULL;
  44. if(t1 != NULL)
  45. t1->next = NULL;
  46. if(t2 != NULL)
  47. t2->next = NULL;
  48. if(t3 != NULL)
  49. t3->next = NULL;
  50. }
  51.  
  52.  
  53. int main(void){
  54. slist* lst = NULL;
  55. for(int i = 0; i < 50; ++i)
  56. slist_add(lst, std::rand() % 31);
  57.  
  58. int a = 10;
  59. int b = 20;
  60.  
  61. triple tp;
  62. slist_triple(lst, &tp, a, b);
  63.  
  64. const slist* p;
  65. for(p = tp.l1; p != NULL; p = p->next)
  66. std::cout << p->val << ' ';
  67. std::cout << std::endl;
  68.  
  69. for(p = tp.l2; p != NULL; p = p->next)
  70. std::cout << p->val << ' ';
  71. std::cout << std::endl;
  72.  
  73. for(p = tp.l3; p != NULL; p = p->next)
  74. std::cout << p->val << ' ';
  75. std::cout << std::endl;
  76.  
  77. slist_clear(tp.l1);
  78. slist_clear(tp.l2);
  79. slist_clear(tp.l3);
  80. return 0;
  81. }
  82.  
  83. //добавление
  84. bool slist_add(slist*& lst, int val){
  85. slist* p = new (std::nothrow) slist();
  86. if(p != NULL){
  87. p->val = val;
  88. p->next = lst;
  89. lst = p;
  90. }
  91. return (p != NULL);
  92. }
  93.  
  94. //удаление
  95. void slist_clear(slist*& lst){
  96. slist* tmp;
  97. while(lst != NULL){
  98. tmp = lst;
  99. lst = lst->next;
  100. delete tmp;
  101. }
  102. }
Success #stdin #stdout 0s 3272KB
stdin
Standard input is empty
stdout
1 3 1 4 0 5 2 2 1 7 4 5 6 7 7 3 5 
20 16 17 13 12 14 19 13 11 13 17 12 18 19 10 
24 22 26 28 30 24 22 27 22 30 28 28 29 29 30 23 29 22