#include <iostream>
#include <cstdlib>
struct slist {
int val;
slist* next;
};
bool slist_add(slist*& lst, int val);
void slist_clear(slist*& lst);
struct triple {
slist* l1, *l2, *l3;
};
void slist_triple(slist*& lst, triple* tp, int a, int b){
slist* p = lst, *t1 = NULL, *t2 = NULL, *t3 = NULL;
tp->l1 = tp->l2 = tp->l3 = NULL;
for(; p != NULL; p = p->next){
if(p->val < a){
if(tp->l1 == NULL)
tp->l1 = t1 = p;
else {
t1->next = p;
t1 = p;
}
} else if(p->val >= a && p->val <= b){
if(tp->l2 == NULL)
tp->l2 = t2 = p;
else {
t2->next = p;
t2 = p;
}
} else {
if(tp->l3 == NULL)
tp->l3 = t3 = p;
else {
t3->next = p;
t3 = p;
}
}
}
lst = NULL;
if(t1 != NULL)
t1->next = NULL;
if(t2 != NULL)
t2->next = NULL;
if(t3 != NULL)
t3->next = NULL;
}
int main(void){
slist* lst = NULL;
for(int i = 0; i < 50; ++i)
slist_add(lst, std::rand() % 31);
int a = 10;
int b = 20;
triple tp;
slist_triple(lst, &tp, a, b);
const slist* p;
for(p = tp.l1; p != NULL; p = p->next)
std::cout << p->val << ' ';
std::cout << std::endl;
for(p = tp.l2; p != NULL; p = p->next)
std::cout << p->val << ' ';
std::cout << std::endl;
for(p = tp.l3; p != NULL; p = p->next)
std::cout << p->val << ' ';
std::cout << std::endl;
slist_clear(tp.l1);
slist_clear(tp.l2);
slist_clear(tp.l3);
return 0;
}
//добавление
bool slist_add(slist*& lst, int val){
slist* p = new (std::nothrow) slist();
if(p != NULL){
p->val = val;
p->next = lst;
lst = p;
}
return (p != NULL);
}
//удаление
void slist_clear(slist*& lst){
slist* tmp;
while(lst != NULL){
tmp = lst;
lst = lst->next;
delete tmp;
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGxpYj4KCnN0cnVjdCBzbGlzdCB7CglpbnQgICAgdmFsOwoJc2xpc3QqIG5leHQ7Cn07CmJvb2wgc2xpc3RfYWRkKHNsaXN0KiYgbHN0LCBpbnQgdmFsKTsKdm9pZCBzbGlzdF9jbGVhcihzbGlzdComIGxzdCk7CgpzdHJ1Y3QgdHJpcGxlIHsKCXNsaXN0KiBsMSwgKmwyLCAqbDM7Cn07Cgp2b2lkIHNsaXN0X3RyaXBsZShzbGlzdComIGxzdCwgdHJpcGxlKiB0cCwgaW50IGEsIGludCBiKXsKCXNsaXN0KiBwID0gbHN0LCAqdDEgPSBOVUxMLCAqdDIgPSBOVUxMLCAqdDMgPSBOVUxMOwoJCgl0cC0+bDEgPSB0cC0+bDIgPSB0cC0+bDMgPSBOVUxMOwoJZm9yKDsgcCAhPSBOVUxMOyBwID0gcC0+bmV4dCl7CgkJaWYocC0+dmFsIDwgYSl7CgkJCWlmKHRwLT5sMSA9PSBOVUxMKQoJCQkJdHAtPmwxID0gdDEgPSBwOwoJCQllbHNlIHsKCQkJCXQxLT5uZXh0ID0gcDsKCQkJCXQxID0gcDsKCQkJfQoJCX0gZWxzZSBpZihwLT52YWwgPj0gYSAmJiBwLT52YWwgPD0gYil7CgkJCWlmKHRwLT5sMiA9PSBOVUxMKQoJCQkJdHAtPmwyID0gdDIgPSBwOwoJCQllbHNlIHsKCQkJCXQyLT5uZXh0ID0gcDsKCQkJCXQyID0gcDsKCQkJfQoJCX0gZWxzZSB7CgkJCWlmKHRwLT5sMyA9PSBOVUxMKQoJCQkJdHAtPmwzID0gdDMgPSBwOwoJCQllbHNlIHsKCQkJCXQzLT5uZXh0ID0gcDsKCQkJCXQzID0gcDsKCQkJfQkJCQoJCX0KCX0KCWxzdCA9IE5VTEw7CglpZih0MSAhPSBOVUxMKQoJCXQxLT5uZXh0ID0gTlVMTDsKCWlmKHQyICE9IE5VTEwpCgkJdDItPm5leHQgPSBOVUxMOwoJaWYodDMgIT0gTlVMTCkKCQl0My0+bmV4dCA9IE5VTEw7Cn0KCgppbnQgbWFpbih2b2lkKXsKCXNsaXN0KiBsc3QgPSBOVUxMOwoJZm9yKGludCBpID0gMDsgaSA8IDUwOyArK2kpCgkJc2xpc3RfYWRkKGxzdCwgc3RkOjpyYW5kKCkgJSAzMSk7CgoJaW50IGEgPSAxMDsKCWludCBiID0gMjA7CgoJdHJpcGxlIHRwOwoJc2xpc3RfdHJpcGxlKGxzdCwgJnRwLCBhLCBiKTsKCgljb25zdCBzbGlzdCogcDsKCWZvcihwID0gdHAubDE7IHAgIT0gTlVMTDsgcCA9IHAtPm5leHQpCgkJc3RkOjpjb3V0IDw8IHAtPnZhbCA8PCAnICc7CglzdGQ6OmNvdXQgPDwgc3RkOjplbmRsOwoKCWZvcihwID0gdHAubDI7IHAgIT0gTlVMTDsgcCA9IHAtPm5leHQpCgkJc3RkOjpjb3V0IDw8IHAtPnZhbCA8PCAnICc7CglzdGQ6OmNvdXQgPDwgc3RkOjplbmRsOwoKCWZvcihwID0gdHAubDM7IHAgIT0gTlVMTDsgcCA9IHAtPm5leHQpCgkJc3RkOjpjb3V0IDw8IHAtPnZhbCA8PCAnICc7CglzdGQ6OmNvdXQgPDwgc3RkOjplbmRsOwoKCXNsaXN0X2NsZWFyKHRwLmwxKTsKCXNsaXN0X2NsZWFyKHRwLmwyKTsKCXNsaXN0X2NsZWFyKHRwLmwzKTsKCXJldHVybiAwOwp9CgovL9C00L7QsdCw0LLQu9C10L3QuNC1CmJvb2wgc2xpc3RfYWRkKHNsaXN0KiYgbHN0LCBpbnQgdmFsKXsKCXNsaXN0KiBwID0gbmV3IChzdGQ6Om5vdGhyb3cpIHNsaXN0KCk7CglpZihwICE9IE5VTEwpewoJCXAtPnZhbCAgPSB2YWw7CgkJcC0+bmV4dCA9IGxzdDsKCQlsc3QgPSBwOwoJfQoJcmV0dXJuIChwICE9IE5VTEwpOwp9CgovL9GD0LTQsNC70LXQvdC40LUKdm9pZCBzbGlzdF9jbGVhcihzbGlzdComIGxzdCl7CglzbGlzdCogdG1wOwoJd2hpbGUobHN0ICE9IE5VTEwpewoJCXRtcCA9IGxzdDsKCQlsc3QgPSBsc3QtPm5leHQ7CgkJZGVsZXRlIHRtcDsKCX0KfQ==