Загрузка данных


#include <stdio.h>
#include <stdlib.h>

typedef struct Node {
    char *data;
    struct Node *next;
} Node;

void add_node(Node **head, Node **tail, char *word)
{
Node *new_node = malloc(sizeof(Node));

if (new_node == NULL) {
    free(word);
    return;
}

new_node->data = word;
new_node->next = NULL;

if (*head == NULL)
    *head = new_node;
else
    (*tail)->next = new_node;
*tail = new_node;
}

Node *create_list(void)
{
Node *head = NULL;
Node *tail = NULL;
char *word = NULL;
size_t size = 0;
size_t len = 0;
int c;
while ((c = getchar()) != '\n' && c != EOF) {
    if (c == ' ') {
        if (len != 0) {
            word[len] = '\0';
            add_node(&head, &tail, word);

            word = NULL;
            size = 0;
            len = 0;
}
}else{
if (len + 1 >= size) {
    if (size ==0){
        size = 8;
    }else{
        size=size*2;
}
        char *tmp = realloc(word, size);
        if (tmp == NULL) {
            free(word);
            return head;
}
word = tmp;
}
word[len++] = (char)c;
}
}

if (len != 0) {
    word[len] = '\0';
    add_node(&head, &tail, word);
}else{
free(word);
}
return head;
}

void print_list(const Node *head)
{
    while (head != NULL) {
        printf("%s", head->data);
        if (head->next != NULL)
            printf(" ");

        head = head->next;
    }

    printf("\n");
}

void delete_list(Node **head)
{
while (*head != NULL) {
    Node *tmp = *head;

    *head = (*head)->next;
    free(tmp->data);
    free(tmp);
    }
}

void remove_nech(Node **head)
{
    int num = 1;
    Node **p = head;
    while (*p != NULL){
        if (num % 2 != 0){
            Node *tmp = *p;
            *p=(*p)->next;
            free(tmp->data);
            free(tmp);
}       else{
            p=&(*p)->next;
}
    num++;
}
}

void inside_list(Node **head)
{

}

int main(void)
{
Node *list = create_list();
print_list(list);
remove_nech(&list);
print_list(list);
delete_list(&list);
return 0;
}