C++ - единственный связанный список - идеи

Я хочу записать метод для удаления последовательных объектов с дублирующимися значениями данных из отдельно связанного списка. Метод должен возвратить количество удаленных объектов. Метод должен очистить память как требуется и должен предположить, что память была выделена с помощью нового.

Например, передавая в списке
-> 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..
1
задан Donal Fellows 12 May 2011 в 12:31
поделиться

3 ответа

Вы можете использовать std :: list , и перед тем, как нажимать на него элемент, вы должны проверить:

if ((*l.rbegin()) == next)
{
    return;
}

l.push_back(next);
1
ответ дан 2 September 2019 в 23:20
поделиться

Насколько я могу судить, оптимизировать здесь нечего. Возврат количества использованных элементов - это просто инкремент счетчика. В принципе, если вы обнаружили, что litem->data == litem->next->data, то вам нужно выполнить удаление следующим образом:

litem* tmpItem = currentItem->next;
currentItem->next = tmpItem->next;
delete tmpItem;

Продолжайте итерацию до тех пор, пока currentItem->next == NULL, чтобы избежать ссылок за конец списка.

0
ответ дан 2 September 2019 в 23:20
поделиться

в метаязыке:

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
}
1
ответ дан 2 September 2019 в 23:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: