Связанные списки и путаница указателей - PullRequest
0 голосов
/ 20 апреля 2019

Я работаю над своим финальным проектом, и меня представили в связанные списки, которые я должен использовать.

Я невероятно расстроен, пытаясь понять, как работает код.Концепция для меня имеет полный смысл.Код, который я приведу в качестве примера, не делает этого.

typedef struct node_s {
    char name[20]; 
    int age; 
    struct node_s *listp; 
} node;

while (!feof(inp)) {
        temp = (node *)malloc(sizeof(node)); // creation of memory
        fscanf(inp, "%s%d", temp->name, &temp->age);
        if (head == NULL)
            head = temp; // setting the head of the list
        else { 
            tail->listp = temp; // else connecting to previous element
        }
        tail = temp; // updating the current element
        tail->listp = NULL; // setting pointer to null.
    }

Я запутался в том, как tail-> listp будет указывать на второй элемент, когда каждый раз он устанавливается в NULL.Чтобы дополнительно проиллюстрировать мою путаницу, в операторе else tail-> listp будет указывать на новый элемент, который понятен.

Но в конце мы указываем tail-> listp на NULL, который просто игнорирует оператор else.Тем не менее, код работает просто отлично, и вот я в замешательстве.

1 Ответ

2 голосов
/ 20 апреля 2019

Вы пропустили оператор, который раньше был

tail = temp; // updating the current element

В цикле вы создаете новый элемент temp и связываете его со списком.Если это первый элемент, вы начинаете список, устанавливая его по существу как головой, так и хвостом.Если это не первый элемент, вы связываете его с концом списка.

tail->listp = temp;

Затем вы устанавливаете tail=temp, чтобы обновить указатель на конец списка, и убедитесь, что элементв конце списка указывается ноль

tail->listp = NULL;

Вы также можете сделать

temp->listp = NULL;
tail=temp;

, что было бы эквивалентно, если бы мои глаза не подвели меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...