Я изучаю C++ некоторое время и только недавно начал просматривать связанные списки. Я могу построить класс класса List с обычными функциями insert/remove из back/front. Теперь я придумал упражнение, которое просит меня написать функцию для обработки вставок/удалений в любом месте списка.Вставка/удаление любого места в связанном списке в C++
Пожалуйста, имейте в виду, что мои вопросы очень просты.
Проблема у меня есть то, что я вижу вопрос как неоднозначный. Какая информация требуется этой функции? Например, для удаления я могу найти несколько кандидатов: 1) удалить первый узел с определенным значением (аргумент: значение) 2) удалить все узлы с определенным значением (аргумент: значение) 3) удалить конкретный узел (аргумент: указатель на этот узел) 1) и 2) я могу легко закодировать. 3) сложнее, но я тоже могу это сделать. Я просто не вижу смысла в 3). Обычным ли манипулировать узлами (вне определения списка) при использовании списков? Как, например, обычная программа, использующая списки для фактического манипулирования указателями на узлы?
Каково обычное значение «удалить в любом месте» в этой настройке?
Аналогичным образом, для «вставки в любом месте» формулировка является странной. Что означает «где угодно»? Предполагается ли, что место в связанном списке задано конкретным узлом?
Непонятно, что вы просите. Вы хотите, чтобы мы догадались, что подразумевалось под упражнением, которое вы читали где-то? Вы можете взглянуть на стандартные контейнеры, чтобы увидеть, как их интерфейс создан. Обычно они используют итераторы – user463035818
Функция требует своего рода маркера места. Это может быть int или, еще лучше, объект, который инкапсулирует позицию, чтобы вам не пришлось перебирать весь список (например, как std :: list использует свой итератор). – StoryTeller
Если это всего лишь упражнение, вы можете запрограммировать все упомянутые способы и даже больше, если придете к другим интересным идеям. Вы могли бы также применять различные способы реагирования на отказ при удалении (например, ни один элемент не найден -> возврат bool или enum, ошибка throw и т. Д.). «Anywhere» может означать все, что вы хотите, с этим контекстом, если это имеет смысл. Я бы добавил вариант удаления узла по указанному индексу. –