# Remove duplicates from a sorted doubly linked list

Given a sorted doubly linked list containing n nodes. The problem is to remove duplicate nodes from the given list.

Examples:

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Algorithm:

```removeDuplicates(head_ref, x)
return
while current->next != NULL
if current->data == current->next->data
else
current = current->next
```

The algorithm for deleteNode(head_ref, current) (which deletes the node using the pointer to the node) is discussed in this post.

```/* C++ implementation to remove duplicates from a
#include <bits/stdc++.h>

using namespace std;

/* a node of the doubly linked list */
struct Node {
int data;
struct Node* next;
struct Node* prev;
};

/* Function to delete a node in a Doubly Linked List.
del  -->  pointer to node to be deleted. */
void deleteNode(struct Node** head_ref, struct Node* del)
{
/* base case */
if (*head_ref == NULL || del == NULL)
return;

/* If node to be deleted is head node */

/* Change next only if node to be deleted
is NOT the last node */
if (del->next != NULL)
del->next->prev = del->prev;

/* Change prev only if node to be deleted
is NOT the first node */
if (del->prev != NULL)
del->prev->next = del->next;

/* Finally, free the memory occupied by del*/
free(del);
}

/* function to remove duplicates from a
{
/* if list is empty */
return;

struct Node* next;

/* traverse the list till the last node */
while (current->next != NULL) {

/* Compare current node with next node */
if (current->data == current->next->data)

/* delete the node pointed to by
'current->next' */

/* else simply move to the next node */
else
current = current->next;
}
}

/* Function to insert a node at the beginning
of the Doubly Linked List */
void push(struct Node** head_ref, int new_data)
{
/* allocate node */
struct Node* new_node =
(struct Node*)malloc(sizeof(struct Node));

/* put in the data  */
new_node->data = new_data;

/* since we are adding at the begining,
prev is always NULL */
new_node->prev = NULL;

/* link the old list off the new node */

/* change prev of head node to new node */

/* move the head to point to the new node */
}

/* Function to print nodes in a given doubly linked list */
{
/* if list is empty */
cout << "Doubly Linked list empty";

cout << head->data << " ";
}
}

/* Driver program to test above functions*/
int main()
{

/* Create the doubly linked list:
4<->4<->4<->4<->6<->8<->8<->10<->12<->12 */

cout << "Original Doubly linked list:n";

/* remove duplicate nodes */

cout << "\nDoubly linked list after"
" removing duplicates:n";

return 0;
}
```

Output:

```Original Doubly linked list:
4 4 4 4 6 8 8 10 12 12
Doubly linked list after removing duplicates:
4 6 8 10 12
```

Time Complexity: O(n)

This article is contributed by Ayush Jauhari. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

# GATE CS Corner    Company Wise Coding Practice

3 Average Difficulty : 3/5.0
Based on 1 vote(s)