#include <stdio.h>
#include <stdlib.h>
struct slistEl
{
struct slistEl * next;
int data;
};
unsigned l_size(struct slistEl * p)
{
int c = 0;
while (p)
{
c++;
p = p->next;
}
return c;
}
void l_printl(struct slistEl * p)
{
int i;
printf("Numer elementu : %d", l_size
(p
));
for (i = 1; p; p = p->next)
printf("Element #%d to %d\n", i
++, p
->data
); }
void l_push_front(struct slistEl * head, int v)
{
struct slistEl * p;
p
= (struct slistEl
*) malloc(sizeof(struct slistEl
)); p->data = v;
p->next = head;
head = p;
}
void l_push_back(struct slistEl * head, int v)
{
struct slistEl *p, *e;
e
= (struct slistEl
*) malloc(sizeof(struct slistEl
)); e->next = NULL;
e->data = v;
p = head;
if (p)
{
while (p->next) p = p->next;
p->next = e;
}
else head = e;
}
void l_insert_before(struct slistEl * head, struct slistEl * e, int v)
{
struct slistEl * p = head;
if (p == e) l_push_front(head, v);
else
{
while (p->next != e) p = p->next;
p
->next
= (struct slistEl
*) malloc(sizeof(struct slistEl
)); p->next->next = e;
p->next->data = v;
}
}
void l_insert_after(struct slistEl * e, int v)
{
struct slistEl
* p
=(struct slistEl
*) malloc(sizeof(struct slistEl
));
p->next = e->next;
p->data = v;
e->next = p;
}
void l_pop_front(struct slistEl * head)
{
struct slistEl * p = head;
if (p)
{
head = p->next;
}
}
void l_pop_back(struct slistEl * head)
{
struct slistEl * p = head;
if (p)
{
if (p->next)
{
while (p->next->next) p = p->next;
p->next = NULL;
}
else
{
head = NULL;
}
}
}
void l_remove(struct slistEl * head, struct slistEl * e)
{
struct slistEl * p;
if (head == e) l_pop_front(head);
else
{
p = head;
while (p->next != e) p = p->next;
p->next = e->next;
}
}
int main()
{
struct slistEl * L = NULL;
struct slistEl * e;
int i;
for (i = 1; i <= 7; i++) l_push_back(L, i);
l_printl(L);
e = L;
for (i = 1; i <= 3; i++) e = e->next;
l_insert_before(L, e, 8);
l_insert_after(e, 5);
l_printl(L);
l_remove(L, e);
l_pop_front(L);
l_pop_back(L);
l_printl(L);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCgpzdHJ1Y3Qgc2xpc3RFbAp7CglzdHJ1Y3QJc2xpc3RFbCAqIG5leHQ7CglpbnQgZGF0YTsKfTsKCgp1bnNpZ25lZCBsX3NpemUoc3RydWN0IHNsaXN0RWwgKiBwKQp7CglpbnQgYyA9IDA7IAoKCXdoaWxlIChwKQoJewoJCWMrKzsgICAgCgkJcCA9IHAtPm5leHQ7Cgl9CglyZXR1cm4gYzsKfQoKCnZvaWQgbF9wcmludGwoc3RydWN0IHNsaXN0RWwgKiBwKQp7CglpbnQgaTsKCXByaW50ZigiTnVtZXIgZWxlbWVudHUgOiAlZCIsIGxfc2l6ZShwKSk7CgoJCgoJZm9yIChpID0gMTsgcDsgcCA9IHAtPm5leHQpCgkJcHJpbnRmKCJFbGVtZW50ICMlZCB0byAlZFxuIiwgaSsrLCBwLT5kYXRhKTsKfQoKCnZvaWQgbF9wdXNoX2Zyb250KHN0cnVjdCBzbGlzdEVsICogIGhlYWQsIGludCB2KQp7CglzdHJ1Y3Qgc2xpc3RFbCAqIHA7CgoJcCA9IChzdHJ1Y3Qgc2xpc3RFbCopIG1hbGxvYyhzaXplb2Yoc3RydWN0IHNsaXN0RWwpKTsgCglwLT5kYXRhID0gdjsgICAgICAKCXAtPm5leHQgPSBoZWFkOwoJaGVhZCA9IHA7Cn0KCgp2b2lkIGxfcHVzaF9iYWNrKHN0cnVjdCBzbGlzdEVsICogaGVhZCwgaW50IHYpCnsKCXN0cnVjdCBzbGlzdEVsICpwLCAqZTsKCgllID0gKHN0cnVjdCBzbGlzdEVsKikgbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2xpc3RFbCkpOyAgCgllLT5uZXh0ID0gTlVMTDsgICAKCWUtPmRhdGEgPSB2OwoJcCA9IGhlYWQ7CglpZiAocCkKCXsKCQl3aGlsZSAocC0+bmV4dCkgcCA9IHAtPm5leHQ7CgkJcC0+bmV4dCA9IGU7Cgl9CgllbHNlIGhlYWQgPSBlOwp9CgoKdm9pZCBsX2luc2VydF9iZWZvcmUoc3RydWN0IHNsaXN0RWwgKiAgaGVhZCwgc3RydWN0IHNsaXN0RWwgKiBlLCBpbnQgdikKewoJc3RydWN0IHNsaXN0RWwgKiBwID0gaGVhZDsKCglpZiAocCA9PSBlKSBsX3B1c2hfZnJvbnQoaGVhZCwgdik7CgllbHNlCgl7CgkJd2hpbGUgKHAtPm5leHQgIT0gZSkgcCA9IHAtPm5leHQ7CgkJcC0+bmV4dCA9IChzdHJ1Y3Qgc2xpc3RFbCopIG1hbGxvYyhzaXplb2Yoc3RydWN0IHNsaXN0RWwpKTsKCQlwLT5uZXh0LT5uZXh0ID0gZTsKCQlwLT5uZXh0LT5kYXRhID0gdjsKCX0KfQoKCnZvaWQgbF9pbnNlcnRfYWZ0ZXIoc3RydWN0IHNsaXN0RWwgKiBlLCBpbnQgdikKewoJc3RydWN0IHNsaXN0RWwgKiBwID0oc3RydWN0IHNsaXN0RWwqKSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBzbGlzdEVsKSk7CgoJcC0+bmV4dCA9IGUtPm5leHQ7CglwLT5kYXRhID0gdjsKCWUtPm5leHQgPSBwOwp9CgoKdm9pZCBsX3BvcF9mcm9udChzdHJ1Y3Qgc2xpc3RFbCAqICBoZWFkKQp7CglzdHJ1Y3QJc2xpc3RFbCAqIHAgPSBoZWFkOyAKCglpZiAocCkKCXsKCQloZWFkID0gcC0+bmV4dDsgICAKCQlmcmVlKHApOyAgICAgICAgIAoJfQp9CgoKdm9pZCBsX3BvcF9iYWNrKHN0cnVjdCBzbGlzdEVsICogIGhlYWQpCnsKCXN0cnVjdAlzbGlzdEVsICogcCA9IGhlYWQ7IAoKCWlmIChwKQoJewoJCWlmIChwLT5uZXh0KQoJCXsKCQkJd2hpbGUgKHAtPm5leHQtPm5leHQpIHAgPSBwLT5uZXh0OwoJCQlmcmVlKHAtPm5leHQpOwoJCQlwLT5uZXh0ID0gTlVMTDsKCQl9CgkJZWxzZQoJCXsKCQkJZnJlZShwKTsKCQkJaGVhZCA9IE5VTEw7CgkJfQoJfQp9CgoKdm9pZCBsX3JlbW92ZShzdHJ1Y3Qgc2xpc3RFbCAqIGhlYWQsIHN0cnVjdCBzbGlzdEVsICogZSkKewoJc3RydWN0IHNsaXN0RWwgKiBwOwoKCWlmIChoZWFkID09IGUpIGxfcG9wX2Zyb250KGhlYWQpOwoJZWxzZQoJewoJCXAgPSBoZWFkOwoJCXdoaWxlIChwLT5uZXh0ICE9IGUpIHAgPSBwLT5uZXh0OwoJCXAtPm5leHQgPSBlLT5uZXh0OwoJCWZyZWUoZSk7Cgl9Cn0KCgoKaW50IG1haW4oKQp7CglzdHJ1Y3Qgc2xpc3RFbCAqIEwgPSBOVUxMOyAKCXN0cnVjdCBzbGlzdEVsICogZTsgICAgICAgCglpbnQgaTsKCglmb3IgKGkgPSAxOyBpIDw9IDc7IGkrKykgbF9wdXNoX2JhY2soTCwgaSk7CglsX3ByaW50bChMKTsKCgkKCgllID0gTDsKCglmb3IgKGkgPSAxOyBpIDw9IDM7IGkrKykgZSA9IGUtPm5leHQ7CgoJCgoJbF9pbnNlcnRfYmVmb3JlKEwsIGUsIDgpOwoKCQoKCWxfaW5zZXJ0X2FmdGVyKGUsIDUpOwoJbF9wcmludGwoTCk7CgoJbF9yZW1vdmUoTCwgZSk7CglsX3BvcF9mcm9udChMKTsKCWxfcG9wX2JhY2soTCk7CglsX3ByaW50bChMKTsKCglyZXR1cm4gMDsKfQ==