#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//struct ListData {
// int data;
//};
typedef struct listItem listItem;
struct listItem {
listItem* next;
int value;
//struct ListData* data;
};
typedef struct {
listItem* head;
listItem* tail;
} list;
listItem* listNewItemLinked(int value, listItem* next) {
listItem
* newItem
= (listItem
*)malloc(sizeof(listItem
)); newItem->value = value; newItem->next = next;
return newItem;
}
listItem* listNewItem(int value) {
return listNewItemLinked(value, NULL);
}
void listDelete(list* list) {
listItem* current = list->head;
while(current) {
listItem* tmp = current->next;
current = tmp;
}
list->head = NULL;
list->tail = NULL;
}
void listPush(list* list, listItem* item) {
listItem* last = item;
while(last->next) last=last->next;
last->next = list->head;
list->head = item;
if (!list->tail)
list->tail = last;
}
void listPushBack(list* list, listItem* item) {
listItem* last = item;
while(last->next) last=last->next;
if (list->tail)
list->tail->next = item;
list->tail = last;
if(!list->head)
list->head = item;
}
void listForEach(list* list, void (*func)(listItem* item)) {
listItem* current = list->head;
while(current) {
func(current);
current = current->next;
}
}
void printItem(listItem* item) {
}
int main() {
list l = {NULL, NULL};
//Example 1 push linked list items => 1 -> 2 -> 3 -> ...
//listPush(&l, listNewItemLinked(1, listNewItemLinked(2, listNewItemLinked(3, NULL))));
//Example 2 push back => ... -> 1 -> 2 -> 3
listPushBack(&l , listNewItem(1));
listPushBack(&l , listNewItem(2));
listPushBack(&l , listNewItem(3));
//Example 3 push front => 3 -> 2 -> 1 -> ...
//listPush(&l, listNewItem(1));
//listPush(&l, listNewItem(2));
//listPush(&l, listNewItem(3));
//Example 4 push back linked list items => ... -> 4 -> 5 -> 6
//listPushBack(&l, listNewItemLinked(4, listNewItemLinked(5, listNewItemLinked(6, NULL))));
listForEach(&l, printItem);
listDelete(&l);
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgoKLy9zdHJ1Y3QgTGlzdERhdGEgewovLwlpbnQJCWRhdGE7Ci8vfTsKCnR5cGVkZWYgc3RydWN0IGxpc3RJdGVtIGxpc3RJdGVtOwoKc3RydWN0IGxpc3RJdGVtIHsKCWxpc3RJdGVtKiBuZXh0OwoJaW50IHZhbHVlOwoJLy9zdHJ1Y3QgTGlzdERhdGEqIGRhdGE7Cn07Cgp0eXBlZGVmIHN0cnVjdCB7CglsaXN0SXRlbSogaGVhZDsKCWxpc3RJdGVtKiB0YWlsOwp9IGxpc3Q7CgpsaXN0SXRlbSogbGlzdE5ld0l0ZW1MaW5rZWQoaW50IHZhbHVlLCBsaXN0SXRlbSogbmV4dCkgewoJbGlzdEl0ZW0qIG5ld0l0ZW0gPSAobGlzdEl0ZW0qKW1hbGxvYyhzaXplb2YobGlzdEl0ZW0pKTsKCW5ld0l0ZW0tPnZhbHVlID0gdmFsdWU7IG5ld0l0ZW0tPm5leHQgPSBuZXh0OwoJcmV0dXJuIG5ld0l0ZW07Cn0KCmxpc3RJdGVtKiBsaXN0TmV3SXRlbShpbnQgdmFsdWUpIHsKCXJldHVybiBsaXN0TmV3SXRlbUxpbmtlZCh2YWx1ZSwgTlVMTCk7Cn0KCnZvaWQgbGlzdERlbGV0ZShsaXN0KiBsaXN0KSB7CglsaXN0SXRlbSogY3VycmVudCA9IGxpc3QtPmhlYWQ7Cgl3aGlsZShjdXJyZW50KSB7CgkJbGlzdEl0ZW0qIHRtcCA9IGN1cnJlbnQtPm5leHQ7CgkJZnJlZShjdXJyZW50KTsKCQljdXJyZW50ID0gdG1wOwoJfQoJbGlzdC0+aGVhZCA9IE5VTEw7CglsaXN0LT50YWlsID0gTlVMTDsKfQoKdm9pZCBsaXN0UHVzaChsaXN0KiBsaXN0LCBsaXN0SXRlbSogaXRlbSkgewoJbGlzdEl0ZW0qIGxhc3QgPSBpdGVtOwoJd2hpbGUobGFzdC0+bmV4dCkgbGFzdD1sYXN0LT5uZXh0OwoJbGFzdC0+bmV4dCA9IGxpc3QtPmhlYWQ7CglsaXN0LT5oZWFkID0gaXRlbTsKCWlmICghbGlzdC0+dGFpbCkKCQlsaXN0LT50YWlsID0gbGFzdDsKfQoKdm9pZCBsaXN0UHVzaEJhY2sobGlzdCogbGlzdCwgbGlzdEl0ZW0qIGl0ZW0pIHsKCWxpc3RJdGVtKiBsYXN0ID0gaXRlbTsKCXdoaWxlKGxhc3QtPm5leHQpIGxhc3Q9bGFzdC0+bmV4dDsKCWlmIChsaXN0LT50YWlsKQoJCWxpc3QtPnRhaWwtPm5leHQgPSBpdGVtOwoJbGlzdC0+dGFpbCA9IGxhc3Q7CgoJaWYoIWxpc3QtPmhlYWQpCgkJbGlzdC0+aGVhZCA9IGl0ZW07Cn0KCnZvaWQgbGlzdEZvckVhY2gobGlzdCogbGlzdCwgdm9pZCAoKmZ1bmMpKGxpc3RJdGVtKiBpdGVtKSkgewoJbGlzdEl0ZW0qIGN1cnJlbnQgPSBsaXN0LT5oZWFkOwoJd2hpbGUoY3VycmVudCkgewoJCWZ1bmMoY3VycmVudCk7CgkJY3VycmVudCA9IGN1cnJlbnQtPm5leHQ7Cgl9Cn0KCnZvaWQgcHJpbnRJdGVtKGxpc3RJdGVtKiBpdGVtKSB7CglwcmludGYoIiVkXG4iLCBpdGVtLT52YWx1ZSk7Cn0KCmludCBtYWluKCkgewoJbGlzdCBsID0gIHtOVUxMLCBOVUxMfTsKCgkvL0V4YW1wbGUgMSBwdXNoIGxpbmtlZCBsaXN0IGl0ZW1zID0+IDEgLT4gMiAtPiAzIC0+IC4uLgoJLy9saXN0UHVzaCgmbCwgbGlzdE5ld0l0ZW1MaW5rZWQoMSwgbGlzdE5ld0l0ZW1MaW5rZWQoMiwgbGlzdE5ld0l0ZW1MaW5rZWQoMywgTlVMTCkpKSk7CgoJLy9FeGFtcGxlIDIgcHVzaCBiYWNrID0+IC4uLiAtPiAxIC0+IDIgLT4gMwoJbGlzdFB1c2hCYWNrKCZsICwgbGlzdE5ld0l0ZW0oMSkpOwoJbGlzdFB1c2hCYWNrKCZsICwgbGlzdE5ld0l0ZW0oMikpOwoJbGlzdFB1c2hCYWNrKCZsICwgbGlzdE5ld0l0ZW0oMykpOwoKCS8vRXhhbXBsZSAzIHB1c2ggZnJvbnQgPT4gMyAtPiAyIC0+IDEgLT4gLi4uCgkvL2xpc3RQdXNoKCZsLCBsaXN0TmV3SXRlbSgxKSk7CgkvL2xpc3RQdXNoKCZsLCBsaXN0TmV3SXRlbSgyKSk7CgkvL2xpc3RQdXNoKCZsLCBsaXN0TmV3SXRlbSgzKSk7CgoJLy9FeGFtcGxlIDQgcHVzaCBiYWNrIGxpbmtlZCBsaXN0IGl0ZW1zID0+IC4uLiAtPiA0IC0+IDUgLT4gNgoJLy9saXN0UHVzaEJhY2soJmwsIGxpc3ROZXdJdGVtTGlua2VkKDQsIGxpc3ROZXdJdGVtTGlua2VkKDUsIGxpc3ROZXdJdGVtTGlua2VkKDYsIE5VTEwpKSkpOwoKCWxpc3RGb3JFYWNoKCZsLCBwcmludEl0ZW0pOwoKCWxpc3REZWxldGUoJmwpOwp9