# C program to remove duplicate nodes from the singly linked list

Here, we are going to learn how to remove duplicate nodes from the singly linked list using C program?
Submitted by Nidhi, on August 23, 2021

Problem Solution:

Given a singly linked list, and we have to remove the duplicate nodes from the linked list.

Program:

The source code to remove duplicate nodes from the singly linked list is given below. The given program is compiled and executed using GCC compile on UBUNTU 18.04 OS successfully.

```// C program to remove duplicate nodes from

#include <stdio.h>
#include <stdlib.h>

//Self-referential structure to create the node.
typedef struct tmp {
int item;
struct tmp* next;
} Node;

//structure for creating the linked list.
typedef struct
{
Node* tail;

} List;

//Initialize List
void initList(List* lp)
{
lp->tail = NULL;
}

//Create node and return the reference of it.
Node* createNode(int item)
{
Node* nNode;

nNode = (Node*)malloc(sizeof(Node));

nNode->item = item;
nNode->next = NULL;

return nNode;
}

//Add a new item at the end of the list.
{
Node* node;
node = createNode(item);

//if list is empty.
lp->tail = node;
}
else {
lp->tail->next = node;
lp->tail = lp->tail->next;
}
}

//Add a new item at beginning of the list.
{
Node* node;
node = createNode(item);

//if list is empty.
lp->tail = node;
}
else {
}
}

//To print the list from start to end of the list.
void printList(List* lp)
{
Node* node;

printf("\nEmpty List");
return;
}

while (node != NULL) {
printf("| %05d |", node->item);
node = node->next;

if (node != NULL)
printf("--->");
}
printf("\n\n");
}

void dupDelete(List* lp)
{
Node* index;
Node* temp;

while (current != NULL) {
temp = current;

index = current->next;

while (index != NULL) {
if (current->item == index->item)
temp->next = index->next;
else
temp = index;
index = index->next;
}
current = current->next;
}
}

//Main function to execute program.
int main()
{
List* lp;

lp = (List*)malloc(sizeof(List));

initList(lp);

printf("List:\n");
printList(lp);
dupDelete(lp);

printf("Updated List:\n");
printList(lp);

return 0;
}
```

Output:

```List:
| 00101 |--->| 00102 |--->| 00101 |--->| 00102 |--->| 00105 |

Updated List:
| 00101 |--->| 00102 |--->| 00105 |
```

Explanation:

Here, we created a self-referential structure to implement a linked list, a function to add a node at the start and end of the list, and a function dupDelete() to remove duplicate elements.

In the main() function, we created a singly linked list and called the function dupDelete() to remove the duplicate elements. After that, we printed the updated list.

Top MCQs

Languages: » C » C++ » C++ STL » Java » Data Structure » C#.Net » Android » Kotlin » SQL
Web Technologies: » PHP » Python » JavaScript » CSS » Ajax » Node.js » Web programming/HTML
Solved programs: » C » C++ » DS » Java » C#
Aptitude que. & ans.: » C » C++ » Java » DBMS
Interview que. & ans.: » C » Embedded C » Java » SEO » HR
CS Subjects: » CS Basics » O.S. » Networks » DBMS » Embedded Systems » Cloud Computing
» Machine learning » CS Organizations » Linux » DOS
More: » Articles » Puzzles » News/Updates