typedef struct NOIDEA_linkedlist
{
	void * data;
	struct NOIDEA_linkedlist * next;
}NOIDEA_linkedlist;

NOIDEA_linkedlist * NOIDEA_linkedlist_push(NOIDEA_linkedlist * noidea_head, void * noidea_data, void * noidea_ptr);
void * NOIDEA_linkedlist_pop(NOIDEA_linkedlist * noidea_head, void (*noidea_free)(void*));
NOIDEA_linkedlist * NOIDEA_linkedlist_gotoTail(NOIDEA_linkedlist * noidea_head);
void * NOIDEA_linkedlist_getTail(NOIDEA_linkedlist * noidea_head);
NOIDEA_linkedlist * NOIDEA_linkedlist_append(NOIDEA_linkedlist * noidea_head, void * noidea_data, void * noidea_ptr);
NOIDEA_linkedlist * NOIDEA_linkedlist_gotoNth(NOIDEA_linkedlist * noidea_head, int Nth);
void * NOIDEA_linkedlist_getNth(NOIDEA_linkedlist * noidea_head, int Nth);
NOIDEA_linkedlist * NOIDEA_linkedlist_insert(NOIDEA_linkedlist * noidea_head, int Nth, void * noidea_data, void * noidea_ptr);
void * NOIDEA_linkedlist_remove(NOIDEA_linkedlist * noidea_head, int Nth, void (*noidea_free)(void*));
int NOIDEA_linkedlist_lenght(NOIDEA_linkedlist * noidea_head);
int NOIDEA_linkedlist_count(NOIDEA_linkedlist * noidea_head,void * noidea_data);
NOIDEA_linkedlist * NOIDEA_linkedlist_copylist(NOIDEA_linkedlist * noidea_head,void * noidea_ptr);
NOIDEA_linkedlist * NOIDEA_linkedlist_emptylist(NOIDEA_linkedlist * noidea_head, void noid_free(void*));
NOIDEA_linkedlist * NOIDEA_linkedlist_join(NOIDEA_linkedlist * noidea_first, NOIDEA_linkedlist * noidea_second);
NOIDEA_linkedlist * NOIDEA_linkedlist_sort(NOIDEA_linkedlist * noidea_head);
NOIDEA_linkedlist * NOIDEA_linkedlist_removeduplicate(NOIDEA_linkedlist * noidea_head);
NOIDEA_linkedlist * NOIDEA_linkedlist_movenode(NOIDEA_linkedlist * noidea_head, int noidea_srcNth, int noidea_desNth);
NOIDEA_linkedlist * NOIDEA_linkedlist_split(NOIDEA_linkedlist * noidea_src, int Nth, void * ptr);
