Помогите понять в чем ошибка. Удаляет все правильно, но при выводе списка в консоли вылетает ошибка.
void del (list **begin, string s) {
list *p = *begin;
if (p == NULL) return;
list *print = *begin;
if (p->st.surname == s)
{
*begin = p->next;
delete p;
return;
}
if (!(p->next == 0)) {
list *p1 = p->next;
list *p2 = p1->next;
while ((p1 != NULL) || !(p == NULL) || (p2 !=0))
{
if (p1->st.surname == s)
{
if (p1->next != 0) {
cout << "KEEEEEEEEEEEEEEEEEEEEK";
delete p1;
p = p1;
p1 = p2;
p2 = p2->next;
continue;
}
else
{
cout << "LOOOOOOOOOOOOOOOOOOOL";
delete p1;
p = NULL;
break;
}
}
else {
cout << "DAAAAAAAAAAAAAAAAAAD";
p = p1;
p1 = p2;
p2 = p2->next;
}
}
}
else cout << "MOOOOOOOOOOOOM";
}
Давайте я лучше напишу на основе того, что вы написали. Вы же постарайтесь понять как нужно подходить и какие шаги предприняты и на этой основе самим пытаться увидеть и исправлять свои ошибки. Исходя из того, что вы написали, я сделал вывод, что у вас есть примерно такое:
struct Student {
string surname;
//...
};
struct list {
Student st;
list* next;
list() : st(""), next(0){}
//...
};
Дальше, кажется, вы пишете функцию, в которой вы удаляете из списка студента с такой то фамилией. Но ваша функция не выдает информацию ( удален ли обьект?). Давайте мы все таки вернем булевский тип, чтобы у нас была информация об успешном удалении (быть информированным всегда хорошо...)
bool del (list **begin, string s) {
if (*begin == 0) return false;
list* p = *begin;
if (p->st.surname == s)
{
*begin = p->next;
delete p;
return true;
}
list* p1 = p->next;
while (p1 && p1->st.surname != s ) {
p = p1;
p1 = p1->next; // p1 будет указывать на обьект с фамилией s
}
// если нет обьект с такой фамилией, то p1 == 0
if(p1) { // если найдено то p1 будет указывать на него
if (p1->next) { // если это не последный элемент
p->next = p1->next; //так как p указывал на обьект перед p1
}
delete p1;
return true;
}
// если ничего не было возвращено, а значит не найден обьект с такой фамилией
return false;
}
Моя цель с помощью кода рассказать все это вам, а не писать лучший код(это для критиков). Теперь вы с этим кодом можете оформить новый вопрос, если много чего непонятно. Или воспользоваться комментарием, чтоб задать свой конкретный вопрос
Сборка персонального компьютера от Artline: умный выбор для современных пользователей