#include <iostream>
using namespace std;
struct elem {
int dane;
elem* nast;
};
void insert(int x, int i, elem* &a) {
if (i < 0) {
string s = "Indeks z poza zakresu.";
throw s;
}
elem* e = new elem;
e->dane = x;
e->nast = NULL;
if (i == 0) {
e->nast = a;
a = e;
}
else {
elem* t = a;
for (i -= 1; i > 0; --i) {
t = t->nast;
if (t == NULL) {
string s = "Indeks z poza zakresu.";
throw s;
}
}
e->nast = t->nast;
t->nast = e;
}
}
elem* tail(elem* pocz) {
return pocz->nast;
}
elem* zad3(elem* pocz, int n) {
if (n == 0)
return pocz;
else
return zad3(tail(pocz), n - 1);
}
elem* reverse(elem* pocz) {
if (pocz == NULL || pocz->nast == NULL) {
return pocz;
} else {
elem* wsk = reverse(tail(pocz));
pocz->nast->nast = pocz;
pocz->nast = NULL;
return wsk;
}
}
elem* zad4(elem* pocz) {
if (pocz == NULL || pocz->nast == NULL)
return pocz;
else
return zad4(tail(reverse(tail(pocz))));
}
void show(elem* lista, int x) {
if (lista->nast != NULL)
show(lista->nast, x - 1);
cout << lista->dane + x;
}
int main() {
elem* poczatek = NULL;
try {
insert(1, 0, poczatek);
insert(2, 1, poczatek);
insert(3, 2, poczatek);
insert(4, 3, poczatek);
insert(5, 4, poczatek);
insert(6, 5, poczatek);
//insert(7, 6, poczatek);
//insert(8, 7, poczatek);
//insert(9, 8, poczatek);
//elem* nowa = zad4(poczatek);
//while (nowa) {
// cout << nowa->dane;
// nowa = nowa->nast;
//}
show(poczatek,1);
}
catch (string message) {
cout << "Wyjatek: " << message << endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IGVsZW0gewoJaW50IGRhbmU7CgllbGVtKiBuYXN0Owp9OwoKdm9pZCBpbnNlcnQoaW50IHgsIGludCBpLCBlbGVtKiAmYSkgewoJaWYgKGkgPCAwKSB7CgkJc3RyaW5nIHMgPSAiSW5kZWtzIHogcG96YSB6YWtyZXN1LiI7CgkJdGhyb3cgczsKCX0KCWVsZW0qIGUgPSBuZXcgZWxlbTsKCWUtPmRhbmUgPSB4OwoJZS0+bmFzdCA9IE5VTEw7CglpZiAoaSA9PSAwKSB7CgkJZS0+bmFzdCA9IGE7CgkJYSA9IGU7Cgl9CgllbHNlIHsKCQllbGVtKiB0ID0gYTsKCQlmb3IgKGkgLT0gMTsgaSA+IDA7IC0taSkgewoJCQl0ID0gdC0+bmFzdDsKCQkJaWYgKHQgPT0gTlVMTCkgewoJCQkJc3RyaW5nIHMgPSAiSW5kZWtzIHogcG96YSB6YWtyZXN1LiI7CgkJCQl0aHJvdyBzOwoJCQl9CgkJfQoJCWUtPm5hc3QgPSB0LT5uYXN0OwoJCXQtPm5hc3QgPSBlOwoJfQp9CgplbGVtKiB0YWlsKGVsZW0qIHBvY3opIHsKCXJldHVybiBwb2N6LT5uYXN0Owp9CgplbGVtKiB6YWQzKGVsZW0qIHBvY3osIGludCBuKSB7CglpZiAobiA9PSAwKQoJCXJldHVybiBwb2N6OwoJZWxzZQoJCXJldHVybiB6YWQzKHRhaWwocG9jeiksIG4gLSAxKTsKfQoKZWxlbSogcmV2ZXJzZShlbGVtKiBwb2N6KSB7CiAgICBpZiAocG9jeiA9PSBOVUxMIHx8IHBvY3otPm5hc3QgPT0gTlVMTCkgewogICAgICAgIHJldHVybiBwb2N6OwogICAgfSBlbHNlIHsKICAgICAgICBlbGVtKiB3c2sgPSByZXZlcnNlKHRhaWwocG9jeikpOwogICAgICAgIHBvY3otPm5hc3QtPm5hc3QgPSBwb2N6OwogICAgICAgIHBvY3otPm5hc3QgPSBOVUxMOwogICAgICAgIHJldHVybiB3c2s7CiAgICB9Cn0KZWxlbSogemFkNChlbGVtKiBwb2N6KSB7CiAgICBpZiAocG9jeiA9PSBOVUxMIHx8IHBvY3otPm5hc3QgPT0gTlVMTCkKICAgICAgICByZXR1cm4gcG9jejsKICAgIGVsc2UKICAgICAgICByZXR1cm4gemFkNCh0YWlsKHJldmVyc2UodGFpbChwb2N6KSkpKTsKfQoKdm9pZCBzaG93KGVsZW0qIGxpc3RhLCBpbnQgeCkgewoJaWYgKGxpc3RhLT5uYXN0ICE9IE5VTEwpCgkJc2hvdyhsaXN0YS0+bmFzdCwgeCAtIDEpOwoJY291dCA8PCBsaXN0YS0+ZGFuZSArIHg7Cn0KCmludCBtYWluKCkgewoJZWxlbSogcG9jemF0ZWsgPSBOVUxMOwoJdHJ5IHsKCQlpbnNlcnQoMSwgMCwgcG9jemF0ZWspOwoJCWluc2VydCgyLCAxLCBwb2N6YXRlayk7CgkJaW5zZXJ0KDMsIDIsIHBvY3phdGVrKTsKCQlpbnNlcnQoNCwgMywgcG9jemF0ZWspOwoJCWluc2VydCg1LCA0LCBwb2N6YXRlayk7CgkJaW5zZXJ0KDYsIDUsIHBvY3phdGVrKTsKCQkvL2luc2VydCg3LCA2LCBwb2N6YXRlayk7CgkJLy9pbnNlcnQoOCwgNywgcG9jemF0ZWspOwoJCS8vaW5zZXJ0KDksIDgsIHBvY3phdGVrKTsKCQkvL2VsZW0qIG5vd2EgPSB6YWQ0KHBvY3phdGVrKTsKCQkvL3doaWxlIChub3dhKSB7CgkJLy8JY291dCA8PCBub3dhLT5kYW5lOwoJCS8vCW5vd2EgPSBub3dhLT5uYXN0OwoJCS8vfQoJCXNob3cocG9jemF0ZWssMSk7Cgl9CgljYXRjaCAoc3RyaW5nIG1lc3NhZ2UpIHsKCQljb3V0IDw8ICJXeWphdGVrOiAiIDw8IG1lc3NhZ2UgPDwgZW5kbDsKCX0KCXJldHVybiAwOwp9