# Remove duplicate copies of a number from unsorted linked list

Remove the duplicate copies of number from the unsorted linked list, means only keep the a number 1 time , in the linked list

What if extra space (temporary buffer can’t be used)?

Approach 1:

If temporary buffer can’t be used , then this is solved in O(n²) time and O(1) space. For each of the current node , see if any node succeeding that node , has the same value. And remove all those nodes.

def remove_dup(self,head): curr = head

while(curr):

runner=curr

while(runner.next): if runner.next.data==curr.data:

runner.next=runner.next.next

else:

runner=runner.next curr=curr.next return head

Time : O(n²)

Space: O(1)

Approach 2:

*Using hashmap*

Use the hash set to store the previously visited node

def remove_dup(self,head): curr = head

while(curr):

if curr.data in hash_set:

prev.next=curr.next

else:

hash_set.add(curr.data)

prev=curr

curr=curr.next

return head

Time : O(n)

Space: O(n)