我想编写一个方法来从单个链表中删除具有重复数据值的连续项。该方法应返回已删除的项目数。该方法应根据需要清理内存,并应假设使用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..
答案 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,以避免超出列表末尾的引用。