Skip to content
Related Articles

Related Articles

Improve Article

First non-repeating in a linked list

  • Difficulty Level : Easy
  • Last Updated : 22 Jun, 2021

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 elements as zero. 
2) Traverse the linked list and count the frequency of all the elements in the hashtable. 
3) Traverse the linked list again and see the element whose frequency is 1 in the hashtable. 

C++




// C++ program to find first non-repeating
// element in a linked list
#include<bits/stdc++.h>
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

Javascript




<script>
 
// Javascript program to find first non-repeating
// element in a linked list
 
/* Link list node */
class Node
{
    constructor()
    {
        this.data = 0;
        this.next = null;
    }
};
 
/* Function to find the first non-repeating
 element in  the linked list */
function firstNonRepeating(head)
{
    // Create an empty map and insert all linked
    // list elements into hash table
    var mp = new Map();
    for (var temp=head; temp!=null; temp=temp.next)
    {
        if(mp.has(temp.data))
        {
            mp.set(temp.data , mp.get(temp.data)+1)
        }
        else
        {
            mp.set(temp.data, 1)
        }
    }
    
    // Traverse the linked list again and return
    // the first node whose count is 1
    for (var temp=head; temp!=null; temp=temp.next)
       if (mp.get(temp.data) == 1)
           return temp.data;
 
    return -1;
}
 
/* Function to push a node */
function push(head_ref, new_data)
{
    var new_node = new Node();
    new_node.data  = new_data;
    new_node.next = (head_ref);   
    (head_ref) = new_node;
    return head_ref;
}
 
/* Driver program to test above function*/
// Let us create below linked list.
// 85.15.18.20.85.35.4.20.null
var head = null;
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);    
document.write( firstNonRepeating(head));                         
 
</script>

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.  



?list=PLqM7alHXFySH41ZxzrPNj2pAYPOI8ITe7
 

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.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.




My Personal Notes arrow_drop_up
Recommended Articles
Page :