Related Articles
First non-repeating in a linked list
• Difficulty Level : Easy
• Last Updated : 16 Dec, 2020

Given a linked list, find its first non-repeating integer element.

Examples:

```Input : 10->20->30->10->20->40->30->NULL
Output :First Non-repeating element is 40.

Input :1->1->2->2->3->4->3->4->5->NULL
Output :First Non-repeating element is 5.

Input :1->1->2->2->3->4->3->4->NULL
Output :No NOn-repeating element is found.```

1) Create a hash table and marked all element as zero.
2) Traverse the linked list and count the frequency of all the element in hashtable.
3) Traverse the linked list again and see the element who’s frequency is 1 in hashtable.

## C++

 `// C++ program to find first non-repeating  ` `// element in a linked list ` `#include ` `using` `namespace` `std; ` ` `  `/* Link list node */` `struct` `Node ` `{ ` `    ``int` `data; ` `    ``struct` `Node* next; ` `}; ` ` `  `/* Function to find the first non-repeating ` ` ``element in  the linked list */` `int` `firstNonRepeating(``struct` `Node *head) ` `{ ` `    ``// Create an empty map and insert all linked ` `    ``// list elements into hash table ` `    ``unordered_map<``int``, ``int``> mp; ` `    ``for` `(Node *temp=head; temp!=NULL; temp=temp->next) ` `       ``mp[temp->data]++;     ` `    `  `    ``// Traverse the linked list again and return ` `    ``// the first node whose count is 1 ` `    ``for` `(Node *temp=head; temp!=NULL; temp=temp->next) ` `       ``if` `(mp[temp->data] == 1) ` `           ``return` `temp->data; ` ` `  `    ``return` `-1; ` `} ` ` `  `/* Function to push a node */` `void` `push(``struct` `Node** head_ref, ``int` `new_data) ` `{ ` `    ``struct` `Node* new_node = ` `            ``(``struct` `Node*) ``malloc``(``sizeof``(``struct` `Node)); ` `    ``new_node->data  = new_data; ` `    ``new_node->next = (*head_ref);     ` `    ``(*head_ref)    = new_node; ` `} ` ` `  `/* Driver program to test above function*/` `int` `main() ` `{ ` `     ``// Let us create below linked list. ` `     ``// 85->15->18->20->85->35->4->20->NULL  ` `     ``struct` `Node* head = NULL; ` `     ``push(&head, 20); ` `     ``push(&head, 4); ` `     ``push(&head, 35);  ` `     ``push(&head, 85);   ` `     ``push(&head, 20); ` `     ``push(&head, 18); ` `     ``push(&head, 15);  ` `     ``push(&head, 85);      ` `     ``cout << firstNonRepeating(head);                           ` `     ``return` `0; ` `}  `

## Python3

 `# Python3 program to find first non-repeating  ` `# element in a linked list ` ` `  `# Link list node  ` `class` `Node: ` `     `  `    ``def` `__init__(``self``, data): ` `        ``self``.data ``=` `data ` `        ``self``.``next` `=` `None` `         `  `# Function to find the first non-repeating ` `# element in  the linked list  ` `def` `firstNonRepeating(head): ` `     `  `    ``# Create an empty map and insert all linked ` `    ``# list elements into hash table ` `    ``mp ``=` `dict``() ` `    ``temp ``=` `head ` `     `  `    ``while` `(temp !``=` `None``): ` `        ``if` `temp.data ``not` `in` `mp: ` `            ``mp[temp.data] ``=` `0` `             `  `        ``mp[temp.data] ``+``=` `1` `        ``temp ``=` `temp.``next` `     `  `    ``temp ``=` `head ` `     `  `    ``# Traverse the linked list again and return ` `    ``# the first node whose count is 1 ` `    ``while` `(temp !``=` `None``): ` `        ``if` `temp.data ``in` `mp: ` `            ``if` `mp[temp.data] ``=``=` `1``: ` `                ``return` `temp.data ` `                 `  `        ``temp ``=` `temp.``next` `  `  `    ``return` `-``1` ` `  `# Function to push a node  ` `def` `push(head_ref, new_data): ` ` `  `    ``new_node ``=` `Node(new_data) ` `    ``new_node.``next` `=` `head_ref ` `    ``head_ref ``=` `new_node ` `     `  `    ``return` `head_ref ` ` `  `# Driver code ` `if` `__name__``=``=``'__main__'``: ` `     `  `    ``# Let us create below linked list. ` `    ``# 85->15->18->20->85->35->4->20->NULL  ` `    ``head ``=` `None` `    ``head ``=` `push(head, ``20``) ` `    ``head ``=` `push(head, ``4``) ` `    ``head ``=` `push(head, ``35``)  ` `    ``head ``=` `push(head, ``85``)   ` `    ``head ``=` `push(head, ``20``) ` `    ``head ``=` `push(head, ``18``) ` `    ``head ``=` `push(head, ``15``) ` `    ``head ``=` `push(head, ``85``) ` `     `  `    ``print``(firstNonRepeating(head)) ` `      `  `# This code is contributed by rutvik_56`

Output:

`15`

Further Optimizations:
The above solution requires two traversals of linked list. In case we have many repeating elements, we can save one traversal by storing positions also in hash table. Please refer last method of Given a string, find its first non-repeating character for details.

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up
Recommended Articles
Page :