На первый взгляд я вижу два вопроса:
- что означает
for (copy1;
?GCC выдает предупреждение statement with no effect
. - первое
if
условие внутри цикла никогда не может быть TRUE
, потому что это обратное условие цикла.
ЕслиЯ правильно понимаю ваше описание: вы хотите
- зациклить список
- удалить любую запись, где
info == value
- напечатать сообщение, когда
value
не было найденов списке - вернуть (возможно обновленный) заголовок списка
Вот как я бы написал эту функцию.Поскольку ваш вопрос не включал определение для struct list
, я сделал обоснованное предположение:
struct list {
char info;
struct list* prev;
struct list* next;
};
struct list* delete_char(struct list* the_list, char value) {
struct list* entry = the_list;
unsigned int count = 0;
while (entry) {
/* entry may be removed during this iteration */
struct list* next = entry->next;
if (entry->info == value) {
struct list* prev = entry->prev;
/* value found */
count++;
/* unchain entry from list */
if (prev) {
/* not removing first entry on the list */
prev->next = next;
} else {
/* removing first entry on the list: new head of list */
the_list = next;
}
if (next) {
/* not removing last entry on the list */
next->prev = prev;
}
/* delete entry */
free(entry);
/* NOTE: entry is now invalid! */
}
entry = next;
}
if (!count) {
printf("The element is not in the list!\n");
}
return the_list;
}