//
// Created by kubik on 7 lip 2018.
//
#pragma once
typedef struct node_t {
int data;
struct node_t *next;
} Node;
typedef struct linked_list_t {
struct node_t *head;
struct node_t *tail;
} List;
struct linked_list_t *ll_create();
int ll_push_back(struct linked_list_t *ll, int value);
int ll_push_front(struct linked_list_t *ll, int value);
int ll_pop_front(struct linked_list_t *ll, int *err_code);
int ll_pop_back(struct linked_list_t *ll, int *err_code);
int ll_back(const struct linked_list_t *ll, int *err_code);
int ll_front(const struct linked_list_t *ll, int *err_code);
struct node_t *ll_begin(struct linked_list_t *ll);
struct node_t *ll_end(struct linked_list_t *ll);
int ll_size(const struct linked_list_t *ll);
int ll_is_empty(const struct linked_list_t *ll);
int ll_at(const struct linked_list_t *ll, unsigned int index, int *err_code);
int ll_insert(struct linked_list_t *ll, unsigned int index, int value);
int ll_remove(struct linked_list_t *ll, unsigned int index, int *err_code);
void ll_clear(struct linked_list_t *ll);
void ll_display(const struct linked_list_t *ll);