使用简单代码从已排序的链接列表中删除重复节点

时间:2018-03-26 11:04:27

标签: c++ singly-linked-list

我正在尝试编写一种从已排序的链表中删除重复节点的方法。如果该方法获得输入链接列表:1-> 1-> 2-> 2-> 2-> 3-> 3,则应使链接列表像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/

2 个答案:

答案 0 :(得分:4)

您按值传递,因此您创建头节点的副本,并更改​​下一个复制字段,而不是原始头指针。您应该通过引用传递指针,因此您的签名应该看起来像

void removeDuplicates(Node* &head)

所以你将修改实际的头部指针

答案 1 :(得分:0)

另一种方法是使用c ++算法

  

的std ::独特

如此处所示 http://en.cppreference.com/w/cpp/algorithm/unique

你必须提供一个好的

  

二元谓词

如果要将元素视为相等,则返回true。 谓词函数的签名应等同于以下内容:

public function setTo($user)
{
    if($user instanceof User || $user instanceof MongoUser) {
        echo "is an instance of User or MongoUser";
        $this->user()->associate($user);

        return $this;
    } else {
       // throw an erorr
    }
}