diff --git a/task3/task3.c b/task3/task3.c new file mode 100644 index 0000000..9bd1e04 --- /dev/null +++ b/task3/task3.c @@ -0,0 +1,88 @@ +#include +#include +#include + +typedef struct node { + int val; + struct node *next; +} NODE; + +NODE *init_node(int val) { + NODE *buf; + buf = malloc(sizeof(NODE)); + if (buf == NULL) { + fprintf(stderr, "Error allocating node\n"); + return NULL; + } + buf->val = val; + buf->next = NULL; + return buf; +} + +void add_node(NODE *list, int val) { + NODE *node = init_node(val); + if (node == NULL) { + return; + } + for (; list->next != NULL; list = list->next) + ; + list->next = node; +} + +void del_node(NODE *list, NODE *node) { + for (; list->next != NULL; list = list->next) { + if (list->next == node) { + list->next = (list->next)->next; + free(node); + return; + } + } +} + +int count_length(NODE *list) { + int counter = 1; + for (; list->next != NULL; list = list->next) { + counter++; + } + return counter; +} + +void print_list(NODE *list) { + for (; list->next != NULL; list = list->next) { + printf("%d\n", list->val); + } + printf("%d\n", list->val); +} + +NODE *reverse_list(NODE *list) { + NODE *prev = NULL; + NODE *next = list->next; + while (next != NULL) { + list->next = prev; + prev = list; + list = next; + next = list->next; + } + list->next = prev; + return list; +} + +int main() { + NODE *list = init_node(4); + add_node(list, 5); + print_list(list); + printf("\n[%d]\n\n", count_length(list)); + del_node(list, list->next); + print_list(list); + printf("\n[%d]\n\n", count_length(list)); + add_node(list, 1); + add_node(list, 2); + add_node(list, 3); + add_node(list, 4); + print_list(list); + printf("\n[%d]\n\n", count_length(list)); + list = reverse_list(list); + print_list(list); + printf("\n[%d]\n\n", count_length(list)); + return 0; +} \ No newline at end of file