for (i=1; i==3; i++) // удалим 3 последних элементов
{
p1=lst;
p2=p1->next;
while (p2)
{p1=p1->next;
p2=p2->next;}
free(p1);
p1 = NULL;
}
for (p1=lst;p1;) //вывод оставшихся элементов
{ fprintf(f,"%s\n",p1->number);
p1=(T=p1)->next;
free(T);
} lst=NULL;
for(n = 0, p = lst; p; p = p -> next, n += 1);
for(p = lst; n > 5; p = p -> next);
// теперь p содержит адрес последнего элемента, который
// должен остаться в списке, это нужно, чтобы его next сбросить в NULL
// (предварительно запомнив где-то в доп. переменной), а потом просто
// проходить по отсеченному "хвосту" и удалять по одному элементу ...
// теперь p содержит адрес последнего элемента, который
// должен остаться в списке, это нужно, чтобы его next сбросить в NULL
// (предварительно запомнив где-то в доп. переменной), а потом просто
// проходить по отсеченному "хвосту" и удалять по одному элементу ...
for (n=0,p=lst;p;p=p->next,n+=1);
for(p=lst;n>5;p=p->next);
(T=p)->next=NULL;
for (T; T; T=T->next)
free(T);
for (p1=lst;p1;) // lst - голова списка
{ fprintf(f,"%s\n",p1->number);
p1=(T=p1)->next;
free(T);
} lst=NULL;
(T=p) -> next = NULL;
for(;T;) {
to_delete = T;
T = T -> next;
free(to_delete);
}
(T=p) -> next = NULL;
for(;T;) {
to_delete = T;
T = T -> next;
free(to_delete);
}
(T=p) -> next = NULL;
T = p -> next; // запоминаешь куда указывал предыдущий элемент
p -> next = NULL; // и потом уже указатель обнуляешь
lst=p;
while (p)
{
fprintf(f, "%s",p->number);
T = p; // !!! ты должна СОХРАНЯТЬ значение...
p = p->next; // потом продвигать указатель...
free(T); // и только потом удалять сохраненное значение
}
lst=NULL;
...
printf("!!! starting !!!\n");
root = read_list();
for(p = root; p; p = p -> next)
printf("%s\n", p -> number);
for(n = 0, p = root; p; p = p -> next, n += 1);
for(p = root; n > 6; p = p -> next) n -= 1;
T = p -> next;
p -> next = NULL;
for(;T;) {
T = (p = T) -> next;
free(p);
}
printf("!!!after deleting!!!\n");
for(p = root; p; p = p -> next)
printf("%s\n", p -> number);
...