【发布时间】:2018-03-26 11:04:27
【问题描述】:
我正在尝试编写一种方法来从排序的链表中删除重复节点。如果该方法获取输入链接列表: 1->1->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;
}
}
【问题讨论】:
-
the_list.erase(std::unique(the_list.begin(), the_list.end()), the_list.end());将是“从排序的链表中删除重复节点”的常用解决方案。见std::unique -
你注意到 head 是一个指针了吗? leetcode.com/problems/remove-duplicates-from-sorted-list/…
-
顺便说一句,你只是“忘记”了你想从列表中删除的节点,你没有删除对象,它的内存泄漏
-
std::unique可以工作,如果节点是通过引用而不是指针传递并提供了额外的增量和比较运算符 - 也可能是赋值,在给定的情况下最好是移动赋值......