Удалить значение в отсортированном связанном списке

0

Привет, я создал функцию, которая вставляет введенные значения в отсортированный связанный список, и теперь я пытаюсь создать другую функцию для удаления введенного значения в связанном списке. В настоящее время я получаю бесконечный цикл рик-джемов, и это невероятно расстраивает.

typedef int ListItemType; // global value in my header file
ListItemType item;  // assigned in head file under ListNode struct

bool List::remove(const ListItemType& removedItem) {
ListNode *curr = head;
ListNode *prev = NULL;

//empty list
if(head == NULL){
    cout<< "No items in the list";
}else{

    //traverse the list
while(curr != NULL){
    if(curr->item == removedItem){
        break; //data has been found break loop
    }else{
        //increment loop
        prev = curr;
        curr = curr->next;
    }
}//end while
    //data has not been found
if(curr == NULL){
        cout << "RICK JAMES";
}else{
    //data has been found delete data
        // case 1: delete at head node
    if(head == curr){
            head = head->next;
    }else{
        // case 2: delete after head
            prev->next = curr->next;
        }   
                delete curr;
                size--; 
            return true;
    }
 } 
   return false;
  }
Теги:
list
nodes

1 ответ

0

логика функций выглядит нормально для меня...

Если вы все время получаете "RICK JAMES", это означает, что он не может найти удаляемый узел - может быть, что-то не так с тем, как вы сравниваете значение узла с параметром функции...

функция принимает

ListItemType & removedItem

который кажется немного странным для типа int datatype, но я не уверен, как поле "item" определено в ListNode... Я бы предложил дважды проверить это. Удачи!

  • 0
    Итак, я избавился от типа ListItem и теперь просто имею элемент int в структуре моего узла, и я удалил оператор if (curr == NULL) и распечатал значение curr-> item в этой точке цикла и обнаружил, что это было правильно зацикливание, а затем удаление значения. За исключением того, что после того, как он удаляет значение, оно должно заканчиваться, вместо этого оно продолжается, и теперь я получаю необработанное исключение ссылки NULL, ссылка на объект не установлена на экземпляр объекта.
  • 0
    Итак, в отладчике я обнаружил, что prev-> next = curr-> next; это линия, которая заставляет меня терпеть крах, но я понятия не имею, почему
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню