Я хочу записать метод для удаления последовательных объектов с дублирующимися значениями данных из отдельно связанного списка. Метод должен возвратить количество удаленных объектов. Метод должен очистить память как требуется и должен предположить, что память была выделена с помощью нового.
Например, передавая в списке
-> a-> b-> c-> c-> a-> b-> b-> b-> a-> пустой указатель должен привести к
-> a-> b-> c-> a-> b-> a-> пустой указатель и возврат 3
Определение элемента списка и объявление функции даны ниже
структура litem {символьные данные; litem* затем;};
интервал remove_consecutive_duplicates (litem*& список);
I have a simple logic to check the next element recursively & removing the element if its duplicate.
But, i would like to know how many efficient ways to do this ? All ideas welcome from C++ gurus..
Вы можете использовать std :: list
, и перед тем, как нажимать на него элемент, вы должны проверить:
if ((*l.rbegin()) == next)
{
return;
}
l.push_back(next);
Насколько я могу судить, оптимизировать здесь нечего. Возврат количества использованных элементов - это просто инкремент счетчика. В принципе, если вы обнаружили, что litem->data == litem->next->data, то вам нужно выполнить удаление следующим образом:
litem* tmpItem = currentItem->next;
currentItem->next = tmpItem->next;
delete tmpItem;
Продолжайте итерацию до тех пор, пока currentItem->next == NULL, чтобы избежать ссылок за конец списка.
в метаязыке:
item = items.first
while (item != null) {
while (item.next != null && item.value = item.next.value) {
temp = item.next
item.next = item.next.next
temp.dispose
}
item = item.next
}