Здравствуйте. Вообщем есть задача: дана последовательность символов оканчивающаяся точкой удалить все символы, у которых равные соседи (первый и последний считать соседями). Последовательность представлена в виде двунаправленного циклического списка.
Программа не хочет удалять эти символы.
Код:
#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)