Мне нужна функция, которая ищет элемент из связанного списка на основе его позиции, сохраняет информацию в переменной и удаляет ее. Например, я хочу удалить пятый элемент в списке и сохранить его содержимое в int& number; и строка и текст; Мой список связан только в одном направлении. Я думаю, что мне удалось найти, но удалить его немного сложнее.
private:
struct List_cell{
unsigned number;
string text;
List_cell *next;
};
List_cell *list_first_;
.
bool LinkedList::find_and_remove(unsigned& position, unsigned& count, unsigned& found_number, string& found_text){
List_cell *current = list_first_;
if(current == nullptr){
return false;
}
else{
while(current != nullptr){
count++;
current = current->next;
if(count == position){
found_number = current->number;
found_text = current->text;
//here should be the deleting i think
return true;
}
}
}
return false;
}
Все ли я сделал правильно и какие есть предложения, как удалить?
work
какList_cell **
? Теперьwork
должно вызывать уважение каждый раз, когда его вызывают. Я также не вижу никакой выгоды низкого уровня, потому что это переназначение адреса по сравнению с переназначением адреса. Или размер того, на что указывает указатель, определяет размер указателя? 17.12.2013*work
эквивалентноprevious->next
, поэтому*work = (*work)->next
— это то, что отменяет связь с найденным узлом. Однакоwork = &(*work)->next
должен быть внутриelse
. В противном случае, если найденный узел находится в конце списка, то**work = null
, а(*work)->next
или(**work).next
не определены. 17.12.2013