[<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
 Уничтожение узла - Пример

Эта программа уничтожает данные, содержащиеся в узле с указателем p.
Данные в узле с указателем q копируются в узел с указателем p. Потом
узел q уничтожается. Шаги работы программы пронумерованы справа.
/* delete node "p" in list "head" */
void delete(struct node *p)
{
        struct node *q;

        q = p->next;                    (1)
        p->data = q->data;              (2)
        p->next = q->next;              (3)
        free (q);                       (4)
}

Чтобы этот алгоритм уничтожения работал со всеми узлами, включая
последний в списке, пустой список должен содержать голову head и узел
с нулевым указателем в поле next. Другими словами, последний узел
является ограничителем и его нельзя уничтожить. Поэтому в программу
надо добавить следующую проверку:
if ( p->next == NULL ) return;
                      УНИЧТОЖЕНИЕ УЗЛА - ПРИМЕР

/* delete node "p" in list "head" */
void delete(struct node *p)
{
        struct node *q;

        q = p->next;
        p->data = q->data;
        p->next = q->next;
        free (q);
}