Здравствуйте. Вообщем есть задача: дана последовательность символов оканчивающаяся точкой удалить все символы, у которых равные соседи (первый и последний считать соседями). Последовательность представлена в виде двунаправленного циклического списка.
Программа не хочет удалять эти символы.
Код:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
 
#define INPUT_FILENAME "input.txt"
#define OUTPUT_FILENAME "output.txt"
 
struct characters {
    char data;
    characters* next;
    characters* prev;
};
 
characters* readList (FILE* file);
void deleteChars(characters* ch);
void writeList(FILE* file, characters* ch);
 
int main()
{
    FILE *read, *write;
    characters* qList;
 
    if ((read = fopen(INPUT_FILENAME, "r")) == NULL) {
        printf("\nError. Can't open file %s.", INPUT_FILENAME);
    }
    qList = readList(read);
    fclose(read);
 
    if ((write = fopen(OUTPUT_FILENAME, "w")) == NULL) {
        printf("\nError. Can't open file %s.",OUTPUT_FILENAME);
    }
    deleteChars(qList);
    writeList(write, qList);
    fclose(write);
    _getch();
    return 0;
}
 
characters* readList (FILE* file)
{
    characters *ch, *head;
    char c;
 
    head = new characters;
    ch = head;
 
    while ((c = fgetc(file)) != '.')
    {
        ch->next = new characters;
        ch->next->prev = ch;
        ch->data = c;
        ch = ch->next;
    }
 
    ch->next=head;
    head->prev = ch;
 
    return head;
}
 
void deleteChars(characters* ch)
{
     characters* head = ch;
     characters* ptmp;
     while (ch != head)
      {
           if (ch->prev->data == ch->next->data)
                   {
                ch->next->prev = ch->prev;
                ch->prev->next = ch->next;
                ptmp = ch;
                delete ptmp;
           }
            ch = ch->next;
      }
      ch = head;
}
 
 
void writeList(FILE* file, characters* ch)
{
    characters* head = ch;
 
    while (ch->next != head)
    {
        fprintf(file, "%c", ch->data);
        ch = ch->next;
    }
}
Думаю, ошибка вот тут, но что присваивать characters* head?:
Код:
void deleteChars(characters* ch)
{
     characters* head = ch;
     characters* ptmp;
     while (ch != head)