使用简单的代码从分类的LinkedList中删除重复的节点



我正在尝试编写一种从排序的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);

最新更新