我正在尝试编写一种从排序的linkedlist删除重复节点的方法。如果该方法获取输入linkedlist:1-> 1-> 2-> 2-> 2-> 3-> 3,则应使linkedlist如1-> 2-> 3。但是问题在于它返回1-> 1-> 2-> 3,这意味着未确定第一个重复元素!这是我的代码:
void removeDuplicates(Node head)
{
Node* Current = &head;
while(Current != NULL && Current->next != NULL)
{
while(Current->next != NULL && Current->next->info == Current->info)
Current->next = Current->next->next;
Current=Current->next;
}
}
添加了整个代码:https://paste.ubuntu.com/p/hstgydjrkn/
您按值传递,因此您可以创建Head节点的副本,然后更改复制的下一个字段,而不是原始的Head Pointer。您应该通过参考将指针通过指针,因此您的签名应该看起来像
void removeDuplicates(Node* &head)
因此,您将修改实际的头指针
一种替代方法是使用C 算法
std ::独特
如下所示http://en.cppreference.com/w/cpp/algorithm/unique
您只需要提供一个好
二进制谓词
如果应将元素视为平等,则返回true。谓词函数的签名应等于以下内容:
bool binaryPredicate(const Node& a, const Node& b);