#include #include typedef struct Node{ int value; struct Node* next; }list; void* create_list(){ void* ptr = NULL; return ptr; } void add_node(list **head, int value){ list *node = (list*)malloc(sizeof(list)); node->value = value; node->next = NULL; if(*head == NULL){ *head = node; }else{ list *tmp = *head; while(tmp->next != NULL){ tmp = tmp->next; } tmp->next = node; } } void print_list(list *head){ while(head != NULL){ printf("%d -> ", head->value); head = head->next; } printf("\n"); } void remove_first(list **head){ list *tmp = *head; *head = (*head)->next; free(tmp); } int list_len(list *head){ int cont = 0; while(head != NULL){ cont++; head = head->next; } return cont; } void add_node_pos(list **head, int pos, int value){ if(pos > list_len(*head)){ fprintf(stderr, "Posicao nao existe\n"); return; } list *new_node = (list*)malloc(sizeof(list)); new_node->value = value; if(pos == 0){ new_node->next = *head; *head = new_node; return; } int cont = 0; list *f = *head; list *s = NULL; while(cont != pos){ s = f; f = f->next; cont++; } s->next = new_node; new_node->next = f; } int main(int argv, char* argc[]){ list *l = create_list(); add_node(&l, 10); add_node(&l, 20); add_node(&l, 30); print_list(l); add_node_pos(&l, 3, 50); print_list(l); add_node_pos(&l, 3, 40); print_list(l); add_node_pos(&l, 0, 0); print_list(l); add_node_pos(&l, 1, 5); print_list(l); return 0; }