Задача: дана последовательность символов (символов 2 или более, точное кол-во заранее не известно). Известно, что 1й символ не точка, и что среди всех символов она точно есть. удалить четные элементы, если количество символов до точки нечетно, и наоборот.
Например: Дано: 1 2 3 4 5 6
Результат: 2 4 6.
Я написал все, кроме самой ПП удаления элементов. Тут я столкнулся с проблемой, если я заранее знаю кол-во элементов, я могу написать код строго под него, но как поместить это в цикл, я не знаю, и как связать условие цикла с количеством элементов...
Собственно вот мой код (знаю, что совсем не очень, но я только учусь 

 ):
#include <stdio.h>
FILE *fp;
struct elem 
{ char el;
elem * next;};
void del (elem **p, int kol) // удаление, которое еще не готово
{
}
int shet ()//подсчет элементов
{
        int i = 0; //i - количество символов до точки
        char ch;
        fscanf(fp,"%c", &ch);
        while(ch != '.')
        {
                i++;
                fscanf(fp,"%c",&ch);
        }
        return i;
}
void vvod (int kol, elem *p) // ввод структуры
{
        elem *r = p;
        char c; //выделение новой памяти
        fseek(fp, 0, SEEK_SET); // установка указателя на начало файла
        fscanf(fp, "%c", &c); //скан первого элемента
        for (int i =0; i < kol; i++)
        {
                r -> el = c; // присваивание информационному полю значения (оно тоже указатель)
                if (i < kol - 1) // выделение памяти под следующий элемент, если он есть
                        r -> next = new elem;
                else //если его нет, то закрыть нулом
                        r->next = NULL;
                r = r -> next; //перевод указателя на следующий элемент
                fscanf(fp, "%c", &c);//скан следующего элемента
        }
}
void main ()
{
        elem * p; 
        fp = fopen("dannye.txt","r");//открытие файла
        p = new elem;//память для первого элемента
        int kol = shet();//количество символов до точки
        vvod(kol, p); //ввод структуры 
        del(&p, kol);
}
  А вот то, что я говорил, про код для заранее известного количества элементов:
(2 элемента дано)
k = k->next;
r->next = NULL;
delete r;
*p = k;
  (4 элемента)
k = k->next;
delete r;
*p = k;
k = (*p) ->next;
r = k;
k = k->next;
delete r;
(*p)->next = k;
  (6 элементов)
k = k->next;
delete r;
*p = k;
k = (*p) ->next;
r = k;
k = k->next;
delete r;
(*p)->next = k;
k = (*p) -> next-> next;
r = k;
k = k->next;
delete r;
(*p)->next->next = k;
Основная идея была в том, что не трогать изначальный указатель на голову структуры (р), добавить второй указатель,приравнять его к р, поменять первую связь (в р), занулить указатель на след. элемент во втором указателе, удалить второй указатель. И это все в цикле:) 
так что я прошу помощи у знающих людей:)