Я пишу программу, которая добавляет серию целых чисел в список перемещения (выполняется со связанным списком). Затем требуется другой набор целых чисел, который программа должна искать в связанном списке. Если программа находит целое число, которое ищет, число перемещается в начало связанного списка.
У меня ошибка при EX_BAD_ACCESS, когда я запускаю метод поиска:
void P1LinkedList::search(const int &query){
iterator itr = begin();
//erases current position, inserts found number to front, increments traversal count
for(int i = 0; i < theSize; i++){
if(query == itr.current->data){
push_front(query);
erase(itr);
}
theTraversalCount++;
itr++;
}
}
Ошибка возникает в операторе if
в for
l oop. С itr.current->data
я пытаюсь получить целое число, удерживаемое узлом, на который указывает itr, но XCode сообщает мне, что узел нулевой.
Кроме того, вот моя реализация класса итератора:
#include"iterator.h"
iterator::iterator(Node *p)
:const_iterator{p}{}
int& iterator::operator*(){
return const_iterator::retrieve();
}
const int& iterator::operator*() const{
return const_iterator::operator*();
}
iterator& iterator::operator++(){
this ->current = this->current->next;
return *this;
}
iterator iterator::operator++(int){
iterator old = *this;
++(*this);
return old;
}
iterator iterator::operator--(){
this->current = this->current->prev;
return(*this);
}
И этот метод вызывает search()
:
void completeQueries(const std::string & queries, P1LinkedList & myList){
std::istringstream iss(queries);
for(int i=0; i < 100; i++){
int val;
iss >> val;
myList.search(val);
}
}
Редактировать:
Вот мой метод erase ():
iterator P1LinkedList::erase(iterator itr){
Node* p = itr.current;
iterator retVal{p->next};
return nullptr;
}