Quantcast
Channel: Esdee
Viewing all articles
Browse latest Browse all 31

remove duplicates from an unsorted linked list

$
0
0
more fun with algorithms: how to remove duplicates from an unsorted linked list in cpp?
easy - just walk along the list and delete duplicate items.
but how to know an item is a duplicate?
well, for every item we could scan the list from the beginning, but this is a ridiculously naive solution - how about keeping all values we encounter while iterating and checking if we have already met a current value?
putting those in an unordered set would be good enough i'd say

#include
#include
using namespace std;

struct List {
int data = 0;
List* next = nullptr;
List(int x) : data(x) {}
};

void remove_duplicates(List* head) {
std::unordered_set cache;
cache.insert(head->data);
List* next = head->next;
while (next != nullptr) {
if (cache.count(next->data) > 0) {
head->next = next->next;
delete next;
next = head->next;
} else {
cache.insert(next->data);
head = next;
next = head->next;
}
}
}

int main() {
List* head = new List(1);
List* list = head;
for (int index = 2; index < 10; ++index) {
List* next = new List(index);
//a silly way to make duplicates in the list
if (next->data % 2 == 0) {
next->data = 2;
} else if (next->data % 3 == 0) {
next->data = 3;
}
list->next = next;
list = next;
}

remove_duplicates(head);

while (head != nullptr) {
printf("%d\n", head->data);
head = head->next;
}

return 0;
}

https://ideone.com/K19v5o

Viewing all articles
Browse latest Browse all 31

Trending Articles