C ++ - 单链接列表 - 想法

时间:2010-07-03 11:35:29

标签: c++ stl linked-list

我想编写一个方法来从单个链表中删除具有重复数据值的连续项。该方法应返回已删除的项目数。该方法应根据需要清理内存,并应假设使用new分配内存。

例如,传入列表
- > A-> B-> C-> C-> A-> B-> B-> B-> A->空 应该导致
- > A-> B-> C-> A-> B-> A->空 并返回3

列表项定义和函数声明如下所示

struct litem {      char数据;      litem * next; };

int remove_consecutive_duplicates(litem *& list);

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..

3 个答案:

答案 0 :(得分:1)

您可以使用std::list,在推送元素之前,您必须检查:

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

l.push_back(next);

答案 1 :(得分:1)

元语言中的

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
}

答案 2 :(得分:0)

据我所知,这里优化不多。返回使用的项目数只是递增计数器的情况。基本上,如果您发现litem-> data == litem-> next->数据,那么您需要像这样进行删除:

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

继续迭代直到currentItem-> next == NULL,以避免超出列表末尾的引用。