2015-10-16 3 views
0

В настоящее время я пытаюсь изучить, как связанные списки работают на C++, и я столкнулся с проблемой удаления определенного значения в связанном списке. Я понимаю, как удалить первый экземпляр определенного значения, и там нет проблем. Однако я не могу окунуться в вопрос, как удалить все экземпляры некоторого значения в связанном списке. Я вижу, как удалить любой экземпляр значения в начале и середине списка, но затем я застрял один раз, когда l-> next - nullptr. Если l-> next является nullptr, то как бы я перенаправил указатель от значения до значения после значения, которое нужно удалить?C++: Как удалить все вхождения значения в связанном списке

Прошу прощения, если это повторяющийся вопрос; Я удалю его, если это так.

+0

Не зная ничего о вашей реализации и только угадывая из очень ограниченной информации, которую вы предоставили нам в своем коде, вы можете сохранить указатель на предыдущий узел в отдельной переменной. –

+0

На самом деле, я не выполняю эту функцию remove; Мне просто интересно, как удалить узел, который находится в конце связанного списка. – MistFTW

+0

Вы делаете это точно так же: следите за * предыдущим * узлом. –

ответ

0

Чтобы удалить узел, вы действительно свести на нет это указатель, поэтому для того, чтобы быть в состоянии держать итерацию списка, вы сохраните следующий указатель перед удалением:

while(node->next != node_I_want_to_remove){ 
    node = node->next; 
} 

Node* tmp = node->next->next; // save the next 
remove(node->next); 
node->next = tmp;    // attach the two ends of the list and keep iterating 
Смежные вопросы