Удалить узел из связанного списка

0

Я застрял в этой функции, чтобы удалить узел из списка, если в списке есть два имени, они оба ушли. Если Энн и Джон включены в список, и я хочу удалить Энн, тогда мой список пуст, Джон ушел.

Что мне не хватает, чтобы сохранить соединение в списке, если я удалю узел init?

bool ContactList::remove(string key)
{
      NodePtr prev = NULL;

       for(NodePtr temp = head; temp != NULL; temp = temp->link)
       {
            if(temp->data.key == key)
            {
                if(prev == NULL)
                {
                    head = temp->link;
                    delete temp;
                    return true;
                }
                else
                {
                    prev = temp->link;
                    delete temp;
                    return true;
                 }

             }

         }
     return false;
}
  • 1
    Потому что ваша логика неверна .. другая часть цикла никогда не будет выполнена. Перепроверьте свою логику. Возможно, в цикле for вы забыли установить переменную prev.
  • 0
    Кроме того, необходимо установить prev связь «с, не prev .
Показать ещё 2 комментария
Теги:
linked-list

2 ответа

2
Лучший ответ

Вы не соблюдаете prev на каждой итерации цикла. Вы хотите что-то вроде:

prev = temp;

в нижней части цикла for.

  • 0
    Большое спасибо, это то, чего не хватало.
1

Попробуйте использовать эту функцию

bool ContactList::remove(string key)
{
  NodePtr prev = NULL;

   for(NodePtr temp = head; temp != NULL; temp = temp->link)
   {
        if(temp->data.key == key)
        {
            if(prev == NULL)
            {
                head = temp->link;
                delete temp;
                return true;
            }
            else
            {
                prev->link = temp->link;   // change.
                delete temp;
                return true;
             }

         }
         prev = temp;      // change.
     }
 return false;
}
  • 0
    Большое спасибо, это то, чего не хватало.

Ещё вопросы

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