Web Toolbar by Wibiya

Pages

Monday, April 18, 2011

Remove duplicates from a linked list.

Solution #1: If we are allowed to use extra space, iterate through the list storing each node's  data in a hash table. Now, if a node's data is already present in the hash table then it's a duplicate, so remove it.

Solution #2: Iterate over the list, checking all previous elements for duplication. If a duplicate is found, remove it. Here is the code,

void removeDup(node* lptr)
{
    node* curr = NULL;
    node* iter = NULL;
    node* prev = NULL;

    curr = lptr->next;
    iter = lptr;
    prev = lptr;

    while(curr != NULL)
    {
        while(iter != curr)
        {
            if(iter->data == curr->data)
            {
                prev->next = curr->next;
                free(curr);
                curr = prev;
                break;
            }
            iter = iter->next;
        }

        iter = lptr;
        prev = curr;
        curr = curr->next;
    }
}

No comments: