#include <stdlib.h>
#include <stdio.h>
/**
* Author: Ozan Özenoğlu
* Date : 10/10/2020
* */
struct linked_list_node {
struct linked_list_node *next;
int val;
};
typedef struct linked_list_node linked_list_node_t;
struct linked_list {
int size;
linked_list_node_t *head;
};
typedef struct linked_list linked_list_t;
void init(linked_list_t *list){
list->size = 0;
list->head = (void*)0;
printf("linked list init completed\n");
}
void add_back(linked_list_t *list , int val) {
linked_list_node_t *node = malloc(sizeof(linked_list_node_t)* 1);
node->val = val;
list->size ++;
linked_list_node_t *head = list->head;
if(head == (void*)0) {
list->head = node;
} else {
while(head->next != (void*)0) {
head = head->next;
}
head->next = node;
}
printf("Added %d\n",val);
}
int get_back(linked_list_t *list) {
if(list->size == 0) {
return -1;
}
linked_list_node_t *head = list->head;
linked_list_node_t *prev = head;
while(head->next != (void*)0) {
prev = head;
head = head->next;
}
int result = head->val;
free(head);
if(prev != head) {
prev->next = (void*)0;
} else {
list->head = (void*)0;
}
list->size--;
return result;
}
int main() {
linked_list_t my_list;
init(&my_list);
add_back(&my_list, 1);
printf("%d \n",get_back(&my_list));
printf("%d \n",get_back(&my_list));
printf("%d \n",get_back(&my_list));
printf("%d \n",get_back(&my_list));
printf("%d \n",get_back(&my_list));
printf("%d \n",get_back(&my_list));
printf("%d \n",get_back(&my_list));
printf("%d \n",get_back(&my_list));
printf("%d \n",get_back(&my_list));
add_back(&my_list, 1);
add_back(&my_list, 2);
add_back(&my_list, 3);
add_back(&my_list, 4);
add_back(&my_list, 5);
add_back(&my_list, 6);
printf("%d \n",get_back(&my_list));
printf("%d \n",get_back(&my_list));
printf("%d \n",get_back(&my_list));
printf("%d \n",get_back(&my_list));
printf("%d \n",get_back(&my_list));
printf("%d \n",get_back(&my_list));
printf("%d \n",get_back(&my_list));
printf("%d \n",get_back(&my_list));
printf("%d \n",get_back(&my_list));
return 0;
}