我正在尝试编写一种从已排序的链表中删除重复节点的方法。如果该方法获得输入链接列表: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;
}
}
答案 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
}
}